Indholdsfortegnelse:

INFRA RØD FJERNKONTROLLeret ROBOCAR VED AT BRUGE AVR (ATMEGA32) MCU: 5 trin
INFRA RØD FJERNKONTROLLeret ROBOCAR VED AT BRUGE AVR (ATMEGA32) MCU: 5 trin

Video: INFRA RØD FJERNKONTROLLeret ROBOCAR VED AT BRUGE AVR (ATMEGA32) MCU: 5 trin

Video: INFRA RØD FJERNKONTROLLeret ROBOCAR VED AT BRUGE AVR (ATMEGA32) MCU: 5 trin
Video: Sådan virker infrarød terrassevarmer 211-352 fra Hortus. 2024, Juli
Anonim
INFRA RØD FJERNKONTROLLeret ROBOCAR VED AT BRUGE AVR (ATMEGA32) MCU
INFRA RØD FJERNKONTROLLeret ROBOCAR VED AT BRUGE AVR (ATMEGA32) MCU

Det nuværende PROJEKT beskriver et design og implementering af en infrarød (IR) fjernstyret RoboCar, der kan bruges til forskellige automatiserede ubemandede kontrolapplikationer. Jeg har designet fjernbetjent RoboCar (venstre-højre/for-bag-bevægelse). Hele systemet er baseret på mikrokontroller (Atmega32), der gør kontrolsystemet smartere og let at ændre til andre applikationer. Det gør det muligt for brugeren at betjene eller styre en RoboCar og betjene netafbryderen fra omkring 5 meter væk.

Nøgleord: IR -dekoder, AVR (Atmega32) mikrokontroller, fjernbetjening til fjernsyn, trådløs kommunikation

_

Trin 1: IntraRed -kommunikation

IntraRed kommunikation
IntraRed kommunikation

IR -kommunikationsprincip:

a) IR -transmission

Senderen af en IR LED inde i dens kredsløb, som udsender infrarødt lys for hver elektrisk puls, der gives til den. Denne puls genereres, når der trykkes på en knap på fjernbetjeningen, hvilket fuldender kredsløbet og giver forspænding til LED'en. Lysdioden ved forspænding udsender lys med bølgelængden på 940nm som en række pulser, svarende til den trykte knap. Men siden IR -LED mange andre kilder til infrarødt lys, såsom os mennesker, pærer, sol osv., Kan den transmitterede information forstyrres. En løsning på dette problem er ved modulering. Det transmitterede signal moduleres ved hjælp af en bærefrekvens på 38 KHz (eller enhver anden frekvens mellem 36 til 46 KHz). IR -LED'en er lavet til at svinge ved denne frekvens i pulsens varighed. Informationen eller lyssignalerne er pulsbreddemoduleret og er indeholdt i 38 KHz frekvensen. Infrarød transmission refererer til energi i området for det elektromagnetiske strålingsspektrum ved bølgelængder længere end for synligt lys, men kortere end radiobølger. Tilsvarende er infrarøde frekvenser højere end for mikrobølger, men lavere end for synligt lys. Forskere opdeler det infrarøde strålingsspektrum (IR) i tre områder. Bølgelængderne er angivet i mikron (symboliseret µ, hvor 1 µ = 10-6 meter) eller i nanometer (forkortet nm, hvor 1 nm = 10-9 meter = 0,001 5). Det nærmeste IR -bånd indeholder energi i området af bølgelængder, der er tættest på det synlige, fra cirka 0,750 til 1,300 500 (750 til 1300 nm). Det mellemliggende IR -bånd (også kaldet det midterste IR -bånd) består af energi i området 1.300 til 3.000 5 (1300 til 3000 nm). Det fjerne IR -bånd strækker sig fra 2.000 til 14.000 5 (3000 nm til 1.4000 x 104nm).

b) IR -modtagelse

Modtageren består af en fotodetektor, der udvikler et elektrisk signal, når lyset kommer ind på den. Detektorens output filtreres ved hjælp af et smalbåndsfilter, der kasserer alle frekvenser under eller over bærefrekvensen (38 KHz i dette tilfælde). Den filtrerede output gives derefter til den passende enhed som en mikrokontroller eller en mikroprocessor, der styrer enheder som en pc eller en robot. Outputtet fra filtrene kan også tilsluttes oscilloskopet for at aflæse pulserne.

Anvendelser af IR:

Infrarød bruges i en række forskellige trådløse kommunikations-, overvågnings- og kontrolapplikationer. Her er nogle eksempler:

· Hjem-underholdning fjernbetjeningsbokse

· Trådløs (lokalnetværk)

· Links mellem bærbare computere og stationære computere

· Trådløst modem

· Indtrængningsdetektorer

· Bevægelsessensorer

· Brandsensorer

· Natsyn systemer

· Medicinsk diagnostisk udstyr

· Missilstyringssystemer

· Geologiske overvågningsenheder

Overførsel af IR -data fra en enhed til en anden kaldes undertiden stråling.

Trin 2: IR -sensor og NEC -protokolfromat

IR -sensor og NEC -protokolfromat
IR -sensor og NEC -protokolfromat
IR -sensor og NEC -protokolfromat
IR -sensor og NEC -protokolfromat
IR -sensor og NEC -protokolfromat
IR -sensor og NEC -protokolfromat
IR -sensor og NEC -protokolfromat
IR -sensor og NEC -protokolfromat

IR -sensorer (figur 1)

TSOP1738, SFH-5110-38 (38kHz)

TSOP -sensorer Funktioner:

  • Forforstærkeren og fotodetektoren er begge i en enkelt pakke
  • Intern filter til PCM -frekvens
  • Forbedret afskærmning mod elektriske feltforstyrrelser
  • TTL- og CMOS -kompatibilitet
  • Output aktiv lav Lavt strømforbrug
  • Høj immunitet mod omgivende lys
  • Kontinuerlig dataoverførsel mulig

NEC -protokol:

NEC IR -transmissionsprotokollen anvender pulsafstandskodning af meddelelsesbitene. Hvert pulsudbrud er 562,5 µs i længden ved en bærefrekvens på 38 kHz (26,3 µs). Logiske bits transmitteres som følger (figur 2):

  • Logisk '0' - et pulsudbrud på 562,5 µs efterfulgt af et 562,5 µs rum med en samlet transmissionstid på 1.125 ms
  • Logisk '1' - et pulsudbrud på 562,5 µs efterfulgt af et mellemrum på 1,6875 ms med en samlet transmissionstid på 2,25 ms

Bærepulsen består af 21 cykler ved 38 kHz. Pulserne har normalt et mærke/mellemrum -forhold på 1: 4 for at reducere det aktuelle forbrug:

(Fig3)

Hver kodesekvens starter med en 9ms puls, kendt som AGC -pulsen. Dette efterfølges af en stilhed på 4,5 ms:

(Fig. 4)

Dataene består derefter af 32 bit, en 16-bit adresse efterfulgt af en 16-bit kommando, vist i den rækkefølge, de overføres (fra venstre mod højre):

(Fig5)

De fire bytes med databit sendes hver især mindst signifikante bit først. Figur 1 illustrerer formatet på en NEC IR -transmissionsramme for en adresse på 00h (00000000b) og en kommando af ADh (10101101b).

Der kræves i alt 67,5 ms for at overføre en meddelelsesramme. Det har brug for 27 ms for at transmittere de 16 bits adresse (adresse + invers) og de 16 kommandobit (kommando + invers).

(Fig6)

Tid, der kræves for at overføre rammen:

16 bit til adressen (adresse + omvendt) kræver 27 ms til at sende tid. Og de 16 bit til kommandoen (kommando + invers) kræver også 27 ms til at sende tid. fordi (adresse + adresse invers) eller (kommando + kommando omvendt) altid vil indeholde 8 '0'er og 8' 1'er, så (8 * 1.125ms) + (8 * 2.25ms) == 27 ms. ifølge denne samlede tid, der kræves til at transmittere rammen, er (9ms +4,5ms +27ms +27ms) = 67,5 ms.

GENTAG KODER: Hvis nøglen på fjernbetjeningen holdes nede, udsendes en gentagelseskode, typisk omkring 40 ms efter pulsen brast, der betegnede slutningen af meddelelsen. En gentagelseskode vil fortsat blive sendt ud med 108 ms mellemrum, indtil nøglen endelig slippes. Gentagelseskoden består af følgende, i rækkefølge:

  • en 9 ms førende pulsudbrud
  • et mellemrum på 2,25 ms
  • en pulsudbrud på 562,5 µs for at markere enden af rummet (og dermed slutningen af den transmitterede gentagelseskode).

(Fig. 7)

Forsinkelsesberegning (1 ms):

Ur Freq = 11.0592 Mhz

Maskincyklus = 12

Forsinkelse = 1 ms

TimerValue = 65536 - ((Delay * ClockFreq)/Machine Cycle) = 65536 - ((1ms * 11.0592Mhz)/12)

= 65536 - 921 = 0xFC67

Trin 3: DC -motorstyring ved hjælp af L293D

DC -motorstyring ved hjælp af L293D
DC -motorstyring ved hjælp af L293D

DC motor

En DC-motor konverterer elektrisk energi til mekanisk energi, der kan bruges til at udføre mange nyttige opgaver. Det kan producere mekanisk bevægelse som Go Forward/Backword i min RoboCar. DC -motorer findes i forskellige ratings som 6V og 12V. Den har to ledninger eller stifter. Vi kan vende rotationsretningen ved at vende inputens polaritet.

Her foretrækker vi L293D, da en rating på 600mA er god til at køre små DC -motorer, og beskyttelsesdioder er inkluderet i selve IC'en. Beskrivelsen af hver pin er som følger: Aktiver pins: Disse er pin -nr. 1 og pin -nr. 9. Pin -nr. 1 bruges til at aktivere Half-H driver 1 og 2. (H-bro på venstre side). Pin -nr. 9 bruges til at aktivere H-bro driver 3 og 4. (H bro på højre side).

Konceptet er enkelt, hvis du vil bruge en bestemt H -bro, skal du give en høj logik til tilsvarende aktiveringsstifter sammen med strømforsyningen til IC. Denne pin kan også bruges til at styre motorens hastighed ved hjælp af PWM -teknik. VCC1 (Pin 16): Strømforsyningsstift. Tilslut den til 5V forsyning. VCC2 (Pin 8): Strømforsyning til motor. Påfør +ve spænding til den i henhold til motorens rating. Hvis du vil køre din motor ved 12V, skal du anvende 12V på denne pin.

Det er også muligt at drive motoren direkte på et batteri, bortset fra det, der bruges til at levere strøm til kredsløbet. Tilslut bare +ve -terminalen for det batteri til VCC2 -stiften og gør GND for begge batterier fælles. (MAX spænding ved denne pin er 36V i henhold til databladet). GND (Pins 4, 5, 12, 13): Tilslut dem til fælles GND for kredsløb. Indgange (Pins 2, 7, 10, 15):

Disse er inputstifter, gennem hvilke styresignaler afgives af mikrokontroller eller andre kredsløb/IC'er. For eksempel, hvis vi på pin 2 (input af 1. halvdel H -driver) giver Logic 1 (5V), får vi en spænding svarende til VCC2 på den tilsvarende udgangsstift af 1. halvdel H -driver, dvs. pin -nr. 3. Tilsvarende for Logic 0 (0V) på Pin 2, 0V på Pin 3 vises. Outputs (Pin 3, 6, 11, 14): Outputs pins. Ifølge input signal kommer output signal.

Motorbevægelser A B

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

…………… Stop: Lav: Lav

…… med uret: Lav: Høj

Mod uret: Høj: Lav

……………. Stop: Høj: Høj

Trin 4: Kredsløbsdiagrammer til motordriver og IR -sensor

Kredsløbsdiagrammer til motordriver og IR -sensor
Kredsløbsdiagrammer til motordriver og IR -sensor
Kredsløbsdiagrammer til motordriver og IR -sensor
Kredsløbsdiagrammer til motordriver og IR -sensor
Kredsløbsdiagrammer til motordriver og IR -sensor
Kredsløbsdiagrammer til motordriver og IR -sensor

ATmega32 er en lav effekt CMOS 8-bit mikrokontroller baseret på AVR-forbedret RISCarchitecture. Ved at udføre kraftfulde instruktioner i en enkelt urcyklus opnår ATmega32 gennemløb, der nærmer sig 1 MIPS pr. MHz, så systemdesigneren kan optimere strømforbruget versus behandlingshastigheden.

AVR -kernen kombinerer et fyldigt instruktionssæt med 32 generelle arbejdsregistre. Alle de 32 registre er direkte forbundet til den aritmetiske logiske enhed (ALU), hvilket gør det muligt at få adgang til to uafhængige registre i en enkelt instruktion udført i en urcyklus. Den resulterende arkitektur er mere kodeeffektiv og opnår op til ti gange hurtigere output end konventionelle CISC -mikrokontrollere.

ATmega32 har følgende funktioner:

  • 32 Kbytes programmerbar flashprogramhukommelse i systemet med Read-While-Write-funktioner,
  • 1024 bytes EEPROM, 2K byte SRAM,
  • 32 generelle I/O -linjer,
  • 32 arbejdsregistre til generelle formål,
  • en JTAG -grænseflade til Boundaryscan,
  • On-chip fejlfindingssupport og programmering, tre fleksible timer/tællere med sammenligningstilstande, interne og eksterne afbrydelser, en seriel programmerbar USART, et byteorienteret to-tråds serielt interface, en 8-kanal,
  • 10-bit ADC med valgfri differentialindgangstrin med programmerbar forstærkning (kun TQFP-pakke),
  • en programmerbar Watchdog Timer med intern oscillator,
  • en SPI -seriel port og
  • seks energibesparende tilstande, der kan vælges af software.

    • Inaktiv tilstand stopper CPU'en, mens USART tillades,
    • To-leder interface, A/D-konverter,
    • SRAM,
    • Timer/tællere,
    • SPI -port og
    • afbryde systemet for at fortsætte med at fungere.
    • Nedlukningstilstand gemmer registerindholdet, men fryser oscillatoren, og deaktiverer alle andre chipfunktioner indtil den næste eksterne afbrydelse eller hardware-nulstilling.
    • I strømsparetilstand kører den asynkrone timer stadig, så brugeren kan vedligeholde en timerbase, mens resten af enheden sover.
    • ADC -støjreduktionsfunktionen stopper CPU'en og alle I/O -moduler undtagen asynkron timer og ADC for at minimere skiftestøj under ADC -konverteringer
    • I standbytilstand kører krystal/resonatoroscillatoren, mens resten af enheden sover. Dette muliggør meget hurtig opstart kombineret med lavt strømforbrug.
    • I tilstanden Udvidet standby kører både hovedoscillatoren og den asynkrone timer fortsat.

Alle relaterede kredsløb er give her, og hovedkredsløbet (atmega32) er også givet.

Trin 5: Avr -programmer

Avr -programmer
Avr -programmer
Avr -programmer
Avr -programmer

1. Ved "fjernbetjeningssensor":

#include #include

#include "remote.h"

// Globals flygtige usignerede int Time; // Hovedtimer, gemmer tid i 10us, // Opdateret af ISR (TIMER0_COMP) flygtig usigneret char BitNo; // Pos af næste BIT flygtige usignerede char ByteNo; // Pos af nuværende Byte

flygtig usigneret char IrData [4]; // De fire databytes i Ir-pakke // 2-Byte-adresse 2-Byte data flygtige usignerede char IrCmdQ [QMAX]; // Final Command Received (Buffer)

flygtig usigneret kul PrevCmd; // Anvendes til gentagelse

// Variabler, der kun bruges til at begynde at gentage, efter at der er trykket på en tast i et bestemt tidspunkt

flygtig usigneret forkølelse Gentag; // 1 = ja 0 = ingen flygtig usigneret char RCount; // Gentag tælling

flygtig kul QFront = -1, QEnd = -1;

flygtig usigneret char Stat; // Modtagerens tilstand

flygtig usigneret kul Edge; // Afbrydelsens kant [RISING = 1 ELLER FALLING = 0]

flygtig usigneret int stop;

/************************************************* ****************************************** / /*FUNKTIONSSTART* / / ************************************************ *********************************************/

ugyldig RemoteInit () {

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

stop = 0; Tilstand = IR_VALIDATE_LEAD_HIGH; Kant = 0; Gentag = 0;

// Opsætningstimer1 // ------------ TCCR0 | = ((1 <

TIMSK | = (1 <

OCR0 = TIMER_COMP_VAL; // Indstil sammenligningsværdi

usigneret char GetRemoteCmd (char wait) {unsigned char cmd;

hvis (vent) mens (QFront ==-1); ellers hvis (QFront ==-1) return (RC_NONE);

cmd = IrCmdQ [QFront];

hvis (QFront == QEnd) QFront = QEnd = -1; ellers {hvis (QFront == (QMAX-1)) QFront = 0; ellers QFront ++; }

returnere cmd;

}

2. main ():

int main (void) {

uint8_t cmd = 0; DDRB = 0x08;

DDRD = 0x80;

DDRC = 0x0f; PORTC = 0x00;

mens (1) // Infinite Loop til aktiv IR-sensor {

cmd = GetRemoteCmd (1);

switch (cmd) {

case xx: {// BOT Bevæger sig frem // Ch+ btn fremadgående motor ();

pause; // Begge motorer i fremadgående retning

}

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

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

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

standard: PORTC = 0x00; pause; // Både venstre og højre motor standser}

}

}/*Slut på hoved*/

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

// Det er en grundlæggende model, men jeg kan bruge den i PWM -tilstand.

//…………………………………………….. Hav det sjovt……………………………………………………//

Anbefalede: