Innholdsfortegnelse:

INFRA RØD FJERNKONTROLLERT ROBOCAR SOM BRUKER AVR (ATMEGA32) MCU: 5 trinn
INFRA RØD FJERNKONTROLLERT ROBOCAR SOM BRUKER AVR (ATMEGA32) MCU: 5 trinn

Video: INFRA RØD FJERNKONTROLLERT ROBOCAR SOM BRUKER AVR (ATMEGA32) MCU: 5 trinn

Video: INFRA RØD FJERNKONTROLLERT ROBOCAR SOM BRUKER AVR (ATMEGA32) MCU: 5 trinn
Video: Waoo Instruktionsvideo Fjernbetjening – fra infrarød til radiofrekvens 2024, November
Anonim
INFRA RØD FJERNKONTROLLERT ROBOCAR SOM BRUKER AVR (ATMEGA32) MCU
INFRA RØD FJERNKONTROLLERT ROBOCAR SOM BRUKER AVR (ATMEGA32) MCU

Det nåværende PROJEKT beskriver en design og implementering av en infrarød (IR) fjernstyrt RoboCar som kan brukes til forskjellige automatiserte ubemannede kontrollapplikasjoner. Jeg har designet fjernstyrt RoboCar (venstre-høyre/fram-bak-bevegelse). Hele systemet er basert på mikrokontroller (Atmega32) som gjør kontrollsystemet smartere og enkelt å endre for andre applikasjoner. Det gjør det mulig for brukeren å betjene eller kontrollere en RoboCar og betjene strømbryteren fra omtrent 5 meter unna.

Stikkord: IR -dekoder, AVR (Atmega32) mikrokontroller, fjernkontroll for TV, trådløs kommunikasjon

_

Trinn 1: IntraRed -kommunikasjon

IntraRed kommunikasjon
IntraRed kommunikasjon

IR kommunikasjonsprinsipp:

a) IR -overføring

Senderen til en IR -LED inne i kretsen, som avgir infrarødt lys for hver elektrisk puls gitt til den. Denne pulsen genereres når du trykker på en knapp på fjernkontrollen, og fullfører dermed kretsen og gir forspenning til LED -en. Lysdioden ved forspenning avgir lys med bølgelengden 940 nm som en serie pulser, som tilsvarer knappen som trykkes. Siden sammen med IR -LED mange andre kilder til infrarødt lys som oss mennesker, lyspærer, sol osv., Kan den overførte informasjonen forstyrres. En løsning på dette problemet er ved modulering. Det overførte signalet moduleres ved hjelp av en bærefrekvens på 38 KHz (eller en hvilken som helst annen frekvens mellom 36 til 46 KHz). IR -LED -en er laget for å svinge ved denne frekvensen i løpet av pulsens varighet. Informasjonen eller lyssignalene er pulsbreddemodulert og finnes i 38 KHz frekvensen. Infrarød overføring refererer til energi i området av det elektromagnetiske strålingsspekteret ved bølgelengder som er lengre enn for synlig lys, men kortere enn for radiobølger. Tilsvarende er infrarøde frekvenser høyere enn for mikrobølger, men lavere enn for synlig lys. Forskere deler det infrarøde strålingsspekteret (IR) i tre regioner. Bølgelengdene er spesifisert i mikron (symbolisert µ, hvor 1 µ = 10-6 meter) eller i nanometer (forkortet nm, hvor 1 nm = 10-9 meter = 0,001 5). Det nære IR -båndet inneholder energi i området av bølgelengder som er nærmest det synlige, fra omtrent 0,750 til 1,300 500 (750 til 1300 nm). Det mellomliggende IR -båndet (også kalt det midtre IR -båndet) består av energi i området 1.300 til 3.000 5 (1300 til 3000 nm). Det fjerne IR -båndet strekker seg fra 2.000 til 14.000 5 (3000 nm til 1.4000 x 104nm).

b) IR -mottak

Mottakeren består av en fotodetektor som utvikler et elektrisk utgangssignal ettersom det kommer lys på den. Utgangen fra detektoren filtreres ved hjelp av et smalbåndsfilter som forkaster alle frekvensene under eller over bærefrekvensen (38 KHz i dette tilfellet). Den filtrerte utgangen blir deretter gitt til den passende enheten som en mikrokontroller eller en mikroprosessor som styrer enheter som en PC eller en robot. Utgangen fra filtrene kan også kobles til oscilloskopet for å lese pulser.

Søknader om IR:

Infrarød brukes i en rekke applikasjoner for trådløs kommunikasjon, overvåking og kontroll. Her er noen eksempler:

· Fjernkontrollbokser for hjemmeunderholdning

· Trådløst (lokalnettverk)

· Koblinger mellom bærbare datamaskiner og stasjonære datamaskiner

· Trådløst modem

· Innbruddsdetektorer

· Bevegelsesdetektorer

· Brannfølere

· Nattvisjonssystemer

· Medisinsk diagnostisk utstyr

· Missilstyringssystemer

· Geologiske overvåkingsenheter

Overføring av IR -data fra en enhet til en annen blir noen ganger referert til som stråling.

Trinn 2: IR -sensor og NEC Protocol Fromat

IR -sensor og NEC Protocol Fromat
IR -sensor og NEC Protocol Fromat
IR -sensor og NEC Protocol Fromat
IR -sensor og NEC Protocol Fromat
IR -sensor og NEC Protocol Fromat
IR -sensor og NEC Protocol Fromat
IR -sensor og NEC Protocol Fromat
IR -sensor og NEC Protocol Fromat

IR -sensorer (figur 1)

TSOP1738, SFH-5110-38 (38kHz)

TSOP -sensorer Funksjoner:

  • Forforsterkeren og fotodetektoren er begge i én pakke
  • Internt filter for PCM -frekvens
  • Forbedret skjerming mot elektriske feltforstyrrelser
  • TTL- og CMOS -kompatibilitet
  • Utgang aktiv lav Lavt strømforbruk
  • Høy immunitet mot omgivende lys
  • Kontinuerlig dataoverføring mulig

NEC -protokoll:

NEC IR -overføringsprotokollen bruker pulsavstandskoding av meldingsbitene. Hver pulsutbrudd er 562,5 µs i lengde, med en bærefrekvens på 38 kHz (26,3 µs). Logiske biter overføres som følger (figur 2):

  • Logisk '0' - et pulsutbrudd på 562,5 μs etterfulgt av et 562,5 μs mellomrom, med en total sendetid på 1,125 ms
  • Logisk '1' - en pulssprengning på 562,5 μs etterfulgt av et mellomrom på 1,6875 ms, med en total sendetid på 2,25 ms

Bærepulsen består av 21 sykluser ved 38 kHz. Pulser har vanligvis et merke/mellomrom -forhold på 1: 4, for å redusere strømforbruket:

(Fig3)

Hver kodesekvens starter med en 9 ms puls, kjent som AGC -pulsen. Dette blir fulgt av en 4,5 ms stillhet:

(Fig4)

Dataene består da av 32 bits, en 16-biters adresse etterfulgt av en 16-biters kommando, vist i rekkefølgen de overføres (fra venstre til høyre):

(Fig5)

De fire byte med databiter sendes hver med minst signifikant bit først. Figur 1 illustrerer formatet til en NEC IR -overføringsramme, for en adresse på 00h (00000000b) og en kommando på ADh (10101101b).

Totalt 67,5 ms kreves for å overføre en meldingsramme. Den trenger 27 ms for å overføre de 16 bitene adresse (adresse + invers) og de 16 kommandobitene (kommando + invers).

(Fig6)

Tid som kreves for å overføre rammen:

16 bits for adressen (adresse + invers) krever 27 ms å sende tid. Og 16 bits for kommandoen (kommando + invers) krever også 27 ms for å sende tid. fordi (adresse + adresse invers) eller (kommando + kommando invers) alltid vil inneholde 8 '0 og 8' 1 er så (8 * 1.125ms) + (8 * 2.25ms) == 27 ms. i henhold til denne totale tiden som kreves for å overføre rammen er (9ms +4,5ms +27ms +27ms) = 67,5 ms.

GJENTA KODER: Hvis nøkkelen på fjernkontrollen holdes nede, sendes en gjentagelseskode, vanligvis rundt 40 ms etter at pulsen brøt ut som betydde slutten av meldingen. En repeteringskode vil fortsette å bli sendt ut med 108 ms mellomrom, til nøkkelen endelig slippes. Gjentagelseskoden består av følgende, i rekkefølge:

  • en 9 ms ledende puls burst
  • et mellomrom på 2,25 ms
  • en pulssprengning på 562,5 µs for å markere slutten på rommet (og dermed slutten på den overførte gjentagelseskoden).

(Fig7)

Beregning av forsinkelse (1 ms):

Klokkefrekvens = 11.0592 Mhz

Maskinsyklus = 12

Forsinkelse = 1 ms

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

= 65536 - 921 = 0xFC67

Trinn 3: DC -motorstyring ved hjelp av L293D

DC -motorstyring ved bruk av L293D
DC -motorstyring ved bruk av L293D

DC motor

En likestrømsmotor konverterer elektrisk energi til mekanisk energi som kan brukes til å gjøre mange nyttige arbeider. Det kan produsere mekanisk bevegelse som Go Forward/Backword of my RoboCar. Likestrømsmotorer kommer i forskjellige karakterer som 6V og 12V. Den har to ledninger eller pinner. Vi kan snu rotasjonsretningen ved å reversere polariteten til inngangen.

Her foretrekker vi L293D ettersom en vurdering på 600mA er bra for å drive små likestrømsmotorer og beskyttelsesdioder er inkludert i selve IC -en. Beskrivelsen av hver pin er som følger: Aktiver pins: Disse er pin -nr. 1 og pin -nr. 9. Pin -nr. 1 brukes for å aktivere Half-H driver 1 og 2. (H bridge på venstre side). Pin -nr. 9 brukes for å aktivere H-brodriver 3 og 4. (H-bro på høyre side).

Konseptet er enkelt, hvis du vil bruke en bestemt H -bro, må du gi en høy logikk til tilsvarende aktiveringspinner sammen med strømforsyningen til IC. Denne pinnen kan også brukes til å kontrollere motorens hastighet ved hjelp av PWM -teknikk. VCC1 (Pin 16): Strømforsyningspinne. Koble den til 5V forsyning. VCC2 (Pin 8): Strømforsyning til motor. Påfør +ve spenning på den i henhold til motorens vurdering. Hvis du vil kjøre motoren på 12V, må du bruke 12V på denne pinnen.

Det er også mulig å drive motoren direkte på et batteri, annet enn det som brukes til å levere strøm til kretsen. Bare koble +ve -terminalen til det batteriet til VCC2 -pinnen og gjør GND for begge batteriene felles. (MAKS spenning på denne pinnen er 36V i henhold til databladet). GND (Pins 4, 5, 12, 13): Koble dem til vanlig GND for krets. Innganger (Pins 2, 7, 10, 15):

Dette er inngangspinner som styresignaler gis gjennom av mikrokontrollere eller andre kretser/ICer. For eksempel, hvis vi på pinne 2 (inngang av 1. halvdel H -driver) gir Logic 1 (5V), får vi en spenning lik VCC2 på den tilsvarende utgangspinnen til 1. halvdel H -driver, dvs. pinnr. 3. På samme måte for Logic 0 (0V) på Pin 2, vises 0V på Pin 3. Utganger (Pin 3, 6, 11, 14): Outputs pins. I henhold til inngangssignal kommer utgangssignal.

Motorbevegelser A B

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

…………… Stopp: Lav: Lav

…… Med urviseren: Lav: Høy

Mot klokken: Høy: Lav

……………. Stopp: Høy: Høy

Trinn 4: Kretsdiagrammer for motordriver og IR -sensor

Kretsdiagrammer for motordriver og IR -sensor
Kretsdiagrammer for motordriver og IR -sensor
Kretsdiagrammer for motordriver og IR -sensor
Kretsdiagrammer for motordriver og IR -sensor
Kretsdiagrammer for motordriver og IR -sensor
Kretsdiagrammer for motordriver og IR -sensor

ATmega32 er en CMOS 8-biters mikrokontroller med lav effekt basert på AVR-forbedret RISCarchitecture. Ved å utføre kraftige instruksjoner i en enkelt klokkesyklus, oppnår ATmega32 gjennomstrømninger som nærmer seg 1 MIPS per MHz, slik at systemdesigneren kan optimalisere strømforbruket kontra behandlingshastigheten.

AVR -kjernen kombinerer et rikt instruksjonssett med 32 generelle arbeidsregistre. Alle de 32 registrene er direkte koblet til den aritmetiske logiske enheten (ALU), slik at to uavhengige registre kan nås i en enkelt instruksjon utført i en klokkesyklus. Den resulterende arkitekturen er mer kodeffektiv og oppnår gjennomføringer opptil ti ganger raskere enn konvensjonelle CISC -mikrokontrollere.

ATmega32 har følgende funksjoner:

  • 32 Kbyte programmerbart Flash-programminne i systemet med funksjoner for lese-mens-skrive,
  • 1024 byte EEPROM, 2K byte SRAM,
  • 32 generelle I/O -linjer,
  • 32 arbeidsregistre for generelle formål,
  • et JTAG -grensesnitt for Boundaryscan,
  • On-chip Debugging-støtte og programmering, tre fleksible timer/tellere med sammenligningsmoduser, interne og eksterne avbrudd, en seriell programmerbar USART, et byte-orientert to-leders serielt grensesnitt, et 8-kanals,
  • 10-bits ADC med valgfri differensial inngangstrinn med programmerbar forsterkning (bare TQFP-pakke),
  • en programmerbar Watchdog Timer med intern oscillator,
  • en SPI -seriell port, og
  • seks valgbare strømsparingsmoduser.

    • Hvilemodus stopper CPU mens den tillater USART,
    • To-leder grensesnitt, A/D-omformer,
    • SRAM,
    • Timer/tellere,
    • SPI -port, og
    • avbryte systemet for å fortsette å fungere.
    • Slå av-modusen lagrer registerinnholdet, men fryser oscillatoren, og deaktiverer alle andre chipfunksjoner til neste eksterne avbrudd eller maskinvaretilbakestilling.
    • I strømsparingsmodus fortsetter den asynkrone timeren å kjøre, slik at brukeren kan opprettholde en tidtakerbase mens resten av enheten sover.
    • ADC -støyreduksjonsmodus stopper CPU og alle I/O -moduler bortsett fra asynkron timer og ADC, for å minimere svitsjestøy under ADC -konverteringer
    • I standby -modus kjører krystall/resonatoroscillatoren mens resten av enheten sover. Dette tillater veldig rask oppstart kombinert med lavt strømforbruk.
    • I utvidet standby -modus fortsetter både hovedoscillatoren og den asynkrone timeren.

Alle relaterte kretser er gi her, og hovedkretsen (atmega32) er også gitt.

Trinn 5: Avr -programmer

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

1. For "ekstern sensor":

#include #include

#include "remote.h"

// Globals volatile unsigned int Time; // Hovedtimer, lagrer tid i 10us, // Oppdatert av ISR (TIMER0_COMP) flyktig usignert char BitNo; // Pos av neste BIT flyktige usignerte char ByteNo; // Pos av nåværende Byte

flyktig usignert røye IrData [4]; // De fire databytesene til Ir-pakken // 2-bytes adresse 2-byte data flyktig usignert char IrCmdQ [QMAX]; // Final Command Received (Buffer)

flyktig usignert røye PrevCmd; // Brukes til gjentagelse

// Variabler som brukes til å begynne å gjenta bare etter at en tast er trykket på en viss tid

flyktig usignert røye Gjenta; // 1 = ja 0 = nei flyktig usignert char RCount; // Gjenta antall

flyktig røye QFront = -1, QEnd = -1;

flyktig usignert røye State; // Mottakerens tilstand

flyktig usignert røye Edge; // Kant for avbrudd [RISING = 1 ELLER FALLING = 0]

flyktig usignert int stopp;

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

ugyldig RemoteInit () {

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

stopp = 0; Tilstand = IR_VALIDATE_LEAD_HIGH; Kant = 0; Gjenta = 0;

// Setup Timer1 // ------------ TCCR0 | = ((1 <

TIMSK | = (1 <

OCR0 = TIMER_COMP_VAL; // Sett sammenligningsverdi

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

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

cmd = IrCmdQ [QFront];

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

retur 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);

bytte (cmd) {

case xx: {// BOT Beveger seg fremover // Ch+ btn forwardmotor ();

gå i stykker; // Begge motorene i foroverretning

}

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

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

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

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

}

}/*Slutt på hoved*/

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

// Det er en grunnleggende modell, men jeg kan bruke den i PWM -modus.

//…………………………………………….. Ha det gøy……………………………………………………//

Anbefalt: