Kazalo:

INFRA RDEČI DALJINSKO UPRAVLJAN ROBOCAR Z UPORABO AVR (ATMEGA32) MCU: 5 korakov
INFRA RDEČI DALJINSKO UPRAVLJAN ROBOCAR Z UPORABO AVR (ATMEGA32) MCU: 5 korakov

Video: INFRA RDEČI DALJINSKO UPRAVLJAN ROBOCAR Z UPORABO AVR (ATMEGA32) MCU: 5 korakov

Video: INFRA RDEČI DALJINSKO UPRAVLJAN ROBOCAR Z UPORABO AVR (ATMEGA32) MCU: 5 korakov
Video: how to make Arduino obstacle avoiding car part-1 2024, Julij
Anonim
INFRA RDEČI DALJINSKO UPRAVLJAN ROBOCAR Z UPORABO AVR (ATMEGA32) MCU
INFRA RDEČI DALJINSKO UPRAVLJAN ROBOCAR Z UPORABO AVR (ATMEGA32) MCU

Ta projekt opisuje zasnovo in izvedbo infrardečega (IR) daljinsko vodenega RoboCar -a, ki se lahko uporablja za različne avtomatizirane aplikacije za upravljanje brez posadke. Oblikoval sem daljinsko vodeni RoboCar (gibanje levo-desno/spredaj-nazaj). Celoten sistem temelji na mikrokrmilniku (Atmega32), zaradi česar je krmilni sistem pametnejši in enostaven za spreminjanje za druge aplikacije. Uporabniku omogoča upravljanje ali krmiljenje RoboCar in upravljanje stikala za napajanje z razdalje približno 5 metrov.

Ključne besede: IR dekoder, AVR (Atmega32) mikrokrmilnik, daljinski upravljalnik televizorja, brezžična komunikacija

_

1. korak: Komunikacija znotraj Rdeče barve

IntraRed komunikacija
IntraRed komunikacija

Načelo IR komunikacije:

a) IR prenos

Oddajnik IR LED v svojem vezju, ki oddaja infrardečo svetlobo za vsak električni impulz. Ta utrip nastane, ko pritisnete gumb na daljinskem upravljalniku in s tem zaključite vezje, kar LED prinese pristranskost. Ko je pristranska LED, oddaja svetlobo valovne dolžine 940 nm kot niz impulzov, kar ustreza pritisnjenemu gumbu. Ker pa lahko skupaj z IR LED mnogi drugi viri infrardeče svetlobe, na primer ljudje, žarnice, sonce itd., Posredujejo posredovane informacije. Rešitev tega problema je modulacija. Oddani signal se modulira z nosilno frekvenco 38 KHz (ali katero koli drugo frekvenco med 36 in 46 KHz). IR LED je nastavljen tako, da niha pri tej frekvenci za čas trajanja impulza. Informacije ali svetlobni signali so modulirani s širino impulza in so v frekvenci 38 KHz. Infrardeči prenos se nanaša na energijo v območju spektra elektromagnetnega sevanja pri valovnih dolžinah, daljših od vidne svetlobe, vendar krajši od tistih radijskih valov. V skladu s tem so infrardeče frekvence višje od frekvenc mikrovalov, vendar nižje od frekvenc vidne svetlobe. Znanstveniki delijo spekter infrardečega sevanja (IR) na tri regije. Valovne dolžine so določene v mikronih (simbolizirano µ, kjer je 1 µ = 10-6 metrov) ali v nanometrih (skrajšano nm, kjer je 1 nm = 10-9 meter = 0,001 5). Bližnji IR pas vsebuje energijo v območju valovnih dolžin, ki so najbližje vidnemu, od približno 0,750 do 1,300 5 (750 do 1300 nm). Vmesni IR pas (imenovan tudi srednji IR pas) je sestavljen iz energije v območju od 1.300 do 3.000 5 (1300 do 3000 nm). Daleki IR pas se razteza od 2.000 do 14.000 5 (3000 nm do 1.4000 x 104 nm).

b) IR sprejem

Sprejemnik je sestavljen iz foto detektorja, ki ob vpadu svetlobe razvije izhodni električni signal. Izhod detektorja se filtrira z ozkopasovnim filtrom, ki zavrže vse frekvence pod ali nad nosilno frekvenco (v tem primeru 38 KHz). Filtrirani izhod se nato odda ustrezni napravi, kot je mikrokrmilnik ali mikroprocesor, ki upravlja naprave, kot sta osebni računalnik ali robot. Izhod iz filtrov je mogoče priključiti tudi na osciloskop za branje impulzov.

Uporaba IR:

Infrardeča povezava se uporablja v različnih aplikacijah za brezžično komunikacijo, spremljanje in nadzor. Tu je nekaj primerov:

· Škatle za daljinsko upravljanje domače zabave

· Brezžično (lokalna omrežja)

· Povezave med prenosnimi in namiznimi računalniki

· Brezžični modem

· Detektorji vdorov

· Detektorji gibanja

· Požarni senzorji

· Sistemi za nočno opazovanje

· Medicinsko diagnostična oprema

· Sistemi za vodenje izstrelkov

· Naprave za geološki nadzor

Prenos IR podatkov iz ene naprave v drugo se včasih imenuje tudi oddajanje.

2. korak: IR senzor in protokol NEC Fromat

IR senzor in protokol NEC Fromat
IR senzor in protokol NEC Fromat
IR senzor in protokol NEC Fromat
IR senzor in protokol NEC Fromat
IR senzor in protokol NEC Fromat
IR senzor in protokol NEC Fromat
IR senzor in protokol NEC Fromat
IR senzor in protokol NEC Fromat

IR senzorji (slika 1)

TSOP1738, SFH-5110-38 (38 kHz)

Značilnosti senzorjev TSOP:

  • Predpojačevalnik in detektor fotografij sta v enem paketu
  • Notranji filter za frekvenco PCM
  • Izboljšana zaščita pred motnjami električnega polja
  • Združljivost s TTL in CMOS
  • Izhod aktiven nizek Nizka poraba energije
  • Visoka odpornost na zunanjo svetlobo
  • Možen stalen prenos podatkov

Protokol NEC:

Protokol NEC za prenos IR uporablja impulzno kodiranje sporočilnih bitov. Vsak impulzni sklop je dolg 562,5 µs pri nosilni frekvenci 38 kHz (26,3 µs). Logični bitovi se prenašajo na naslednji način (slika 2):

  • Logično "0" - 562,5 µs impulzni niz, ki mu sledi 562,5 µs presledek, s skupnim časom prenosa 1,125 ms
  • Logično "1" - 562,5 µs impulzni niz, ki mu sledi 1,6875 ms presledka, s skupnim časom prenosa 2,25 ms

Nosilni impulz je sestavljen iz 21 ciklov pri 38 kHz. Impulzi imajo običajno razmerje oznaka/prostor 1: 4, da zmanjšajo trenutno porabo:

(Slika 3)

Vsako kodno zaporedje se začne z impulzom 9 ms, znanim kot impulz AGC. Sledi tišina 4,5 ms:

(Slika 4)

Podatki so nato sestavljeni iz 32 bitov, 16-bitnega naslova, ki mu sledi 16-bitni ukaz, prikazan v vrstnem redu, v katerem so poslani (od leve proti desni):

(Slika 5)

Vsak po štiri bajte podatkovnih bitov najprej pošlje najmanj pomemben bit. Slika 1 prikazuje obliko okvirja NEC IR prenosa za naslov 00h (00000000b) in ukaz ADh (10101101b).

Za prenos okvirja sporočila je potrebnih skupno 67,5 ms. Za prenos 16 bitov naslova (naslov + inverzni) in 16 bitov ukaza (ukaz + inverzni) potrebuje 27 ms.

(Slika 6)

Čas, potreben za prenos okvirja:

16 bitov za naslov (naslov + inverzno) zahteva 27 ms za prenos časa. 16 bitov za ukaz (ukaz + inverzno) pa za prenos časa potrebujejo tudi 27 ms. ker bo (naslov + naslov obratno) ali (ukaz + ukaz obratno) vedno vseboval 8 '0 in 8' 1, torej (8 * 1.125ms) + (8 * 2.25ms) == 27 ms. glede na ta skupni čas, potreben za prenos okvirja, je (9ms +4.5ms +27ms +27ms) = 67.5 ms.

KODE PONOVITVE: Če držite tipko na daljinskem upravljalniku pritisnjeno, bo izdana ponovna koda, običajno približno 40 ms po impulzu, ki je pomenil konec sporočila. Ponavljajoča se koda se bo še naprej pošiljala v intervalih 108 ms, dokler se ključ dokončno ne sprosti. Koda za ponavljanje je sestavljena iz naslednjega vrstnega reda:

  • 9ms vodilnega impulza
  • 2,25 ms prostora
  • 562,5 µs impulz, ki označuje konec presledka (in s tem konec oddane ponovitvene kode).

(Slika 7)

Izračun zakasnitve (1 ms):

Frekvenca ure = 11,0592 Mhz

Strojni cikel = 12

Zamuda = 1 ms

TimerValue = 65536 - ((Zakasnitev * ClockFreq)/Strojni cikel) = 65536 - ((1ms * 11.0592Mhz)/12)

= 65536 - 921 = 0xFC67

Korak: Nadzor enosmernega motorja z uporabo L293D

Krmiljenje enosmernega motorja z uporabo L293D
Krmiljenje enosmernega motorja z uporabo L293D

DC motor

Enosmerni motor pretvarja električno energijo v mehansko energijo, ki jo je mogoče uporabiti za številna uporabna dela. Lahko proizvede mehansko gibanje, kot je Naprej/Nazaj mojega Robocarja. DC motorji so na voljo v različnih nazivih, kot so 6V in 12V. Ima dve žici ali zatiči. Smer vrtenja lahko obrnemo tako, da obrnemo polariteto vhoda.

Tu imamo raje L293D, saj je ocena 600mA dobra za vožnjo majhnih enosmernih motorjev, zaščitne diode pa so vključene v sam IC. Opis vsakega zatiča je naslednji: Omogoči zatiče: To so nožice št. 1 in zatič št. 9. Pin št. 1 se uporablja za omogočanje gonilnika Half-H 1 in 2. (H most na levi strani). Pin št. 9 se uporablja za omogočanje gonilnika H-most 3 in 4. (H most na desni strani).

Koncept je preprost, če želite uporabiti določen H -most, morate dati visoko logiko ustreznim zatičem za omogočanje skupaj z napajanjem IC. Ta pin lahko uporabite tudi za krmiljenje hitrosti motorja s tehniko PWM. VCC1 (Pin 16): napajalni zatič. Priključite ga na 5V napajanje. VCC2 (Pin 8): Napajanje motorja. Na to priključite +ve napetost v skladu z nazivno močjo motorja. Če želite motor poganjati pri 12V, uporabite 12V na tem zatiču.

Možen je tudi pogon motorja neposredno na akumulator, razen tistega, ki se uporablja za napajanje tokokroga. Samo priključite +ve priključek te baterije na pin VCC2 in naredite GND obeh baterij skupnih. (Največja napetost na tem zatiču je 36 V, kot je navedeno v podatkovnem listu). GND (zatiči 4, 5, 12, 13): Priključite jih na skupni GND vezja. Vhodi (zatiči 2, 7, 10, 15):

To so vhodni zatiči, preko katerih mikrokrmilniki ali druga vezja/IC oddajajo krmilne signale. Na primer, če na pin 2 (vhod gonilnika prve polovice H) podamo logiko 1 (5V), bomo dobili napetost, ki je enaka VCC2 na ustreznem izhodnem zatiču gonilnika prve polovice H, tj. 3. Podobno za Logic 0 (0V) na Pin 2 se prikaže 0V na Pin 3. Izhodi (Pin 3, 6, 11, 14): Izhodni zatiči. Glede na vhodni signal prihaja izhodni signal.

Premiki motorja A B

------------------------------------------------------------------------------------------

…………… Stop: Nizko: Nizko

…… V smeri urinega kazalca: Nizko: Visoko

V nasprotni smeri urinega kazalca: Visoko: Nizko

……………. Ustavi: Visoko: Visoko

4. korak: Sheme vezja za gonilnik motorja in IR senzor

Sheme vezja za gonilnik motorja in IR senzor
Sheme vezja za gonilnik motorja in IR senzor
Sheme vezja za gonilnik motorja in IR senzor
Sheme vezja za gonilnik motorja in IR senzor
Sheme vezja za gonilnik motorja in IR senzor
Sheme vezja za gonilnik motorja in IR senzor

ATmega32 je 8-bitni mikrokrmilnik CMOS z nizko porabo energije, ki temelji na izboljšani RIS arhitekturi AVR. Z izvajanjem zmogljivih navodil v enem ciklu ure ATmega32 doseže zmogljivost, ki se približuje 1 MIPS na MHz, kar omogoča oblikovalcu sistema, da optimizira porabo energije glede na hitrost obdelave.

Jedro AVR združuje bogat nabor navodil z 32 splošnimi delovnimi registri. Vsi registri 32 so neposredno povezani z enoto za aritmetično logiko (ALU), kar omogoča dostop do dveh neodvisnih registrov v enem samem navodilu, izvedenem v enem ciklu. Nastala arhitektura je bolj kodno učinkovita, hkrati pa dosega do desetkrat hitrejše zmogljivosti kot običajni mikrokrmilniki CISC.

ATmega32 ponuja naslednje funkcije:

  • 32 Kbajtov sistemskega programabilnega pomnilnika programa Flash z možnostjo branja med pisanjem,
  • 1024 bajtov EEPROM, 2 KB bajt SRAM,
  • 32 splošnih V/I linij,
  • 32 delovnih registrov za splošno rabo,
  • vmesnik JTAG za Boundaryscan,
  • Podpora in programiranje odpravljanja napak na čipu, trije prilagodljivi časovniki/števci s primerjalnimi načini, notranji in zunanji prekinitve, serijsko programabilni USART, dvožični serijski vmesnik, usmerjen v bajte, 8-kanalni,
  • 10-bitni ADC z izbirno stopnjo diferencialnega vhoda s programabilnim ojačanjem (samo paket TQFP),
  • programabilni časovni nadzornik z notranjim oscilatorjem,
  • serijska vrata SPI in
  • šest programsko izbranih načinov varčevanja z energijo.

    • Način mirovanja ustavi procesor, hkrati pa dovoli USART,
    • Dvožični vmesnik, A/D pretvornik,
    • SRAM,
    • Časovnik/števci,
    • Vrata SPI in
    • prekiniti sistem za nadaljnje delovanje.
    • Način izklopa shrani vsebino registra, vendar zamrzne oscilator in onemogoči vse druge funkcije čipa do naslednjega zunanjega prekinitve ali ponastavitve strojne opreme.
    • V načinu varčevanja z energijo se asinhroni časovnik še naprej izvaja, kar uporabniku omogoča vzdrževanje časovnika, medtem ko preostala naprava spi.
    • Način zmanjšanja šuma ADC zaustavi CPE in vse V/I module, razen asinhronega časovnika in ADC, da zmanjša hrup pri preklapljanju med pretvorbami ADC
    • V stanju pripravljenosti oscilator kristala/resonatorja deluje, medtem ko preostala naprava spi. To omogoča zelo hiter zagon v kombinaciji z nizko porabo energije.
    • V načinu podaljšane pripravljenosti še naprej delujeta tako glavni oscilator kot asinhroni časovnik.

Tu so navedena vsa povezana vezja in podano je tudi glavno vezje (atmega32).

5. korak: Programi Avr

Avr programi
Avr programi
Avr programi
Avr programi

1. Za "daljinski senzor":

#include #include

#include "remote.h"

// Globalni nestanovitni nepodpisani int čas; // Glavni časovnik, shrani čas v 10us, // Posodobil ISR (TIMER0_COMP) nestanovitni brezznačni znak BitNo; // Poz naslednjega nestanovitnega brezpodpisanega znaka BIT ByteNo; // Poz trenutnega bajta

hlapni nepodpisani char IrData [4]; // Štirje podatkovni bajti paketa Ir // 2-bajtni naslov 2-bajtni podatki nestanovitni brez podpisanega znaka IrCmdQ [QMAX]; // prejet končni ukaz (vmesnik)

hlapni nepodpisani znak PrevCmd; // Uporablja se za ponovitev

// Spremenljivke, ki se uporabljajo za začetek ponavljanja šele po pritisku tipke za določen čas

hlapni nepodpisani znak Ponovi; // 1 = da 0 = brez hlapnega nepodpisanega znaka RCount; // Število ponovitev

hlapen char QFront = -1, QEnd = -1;

nestanovitna nepodpisana država char; // Stanje prejemnika

hlapni nepodpisani char Edge; // Rob prekinitve [RISING = 1 OR FALLING = 0]

hlapna brez podpisa int stop;

/*********************************************** ****************************************************************** / / ********************************************** ********************************************/

void RemoteInit () {

char i; za (i = 0; i <4; i ++) IrData = 0;

stop = 0; Stanje = IR_VALIDATE_LEAD_HIGH; Rob = 0; Ponovi = 0;

// Nastavitveni časovnik1 // ------------ TCCR0 | = ((1 <

TIMSK | = (1 <

OCR0 = TIMER_COMP_VAL; // Nastavi primerjalno vrednost

unsigned char GetRemoteCmd (čakanje na znak) {unsigned char cmd;

if (počakajte) while (QFront ==-1); else if (QFront ==-1) return (RC_NONE);

cmd = IrCmdQ [QFront];

if (QFront == QEnd) QFront = QEnd = -1; else {if (QFront == (QMAX-1)) QFront = 0; drugače QFront ++; }

vrnitev cmd;

}

2. glavni ():

int main (void) {

uint8_t cmd = 0; DDRB = 0x08;

DDRD = 0x80;

DDRC = 0x0f; PORTC = 0x00;

while (1) // Neskončna zanka do aktivnega IR-senzorja {

cmd = GetRemoteCmd (1);

stikalo (cmd) {

primer xx: {// BOT Premik naprej // Ch+ btn forwardmotor ();

zlom; // Oba motorja v smeri naprej

}

………………………………………………….

………………………………………………….

………………………………………………….

privzeto: PORTC = 0x00; break; // Levi in desni motor se ustavita}

}

}/*Konec glavnega*/

……………………………………………………………………………………………………………………

// To je osnovni model, vendar ga lahko uporabljam v načinu PWM.

//…………………………………………….. Zabavaj se……………………………………………………//

Priporočena: