Innehållsförteckning:

INFRA RÖD FJÄRRKONTROLLerad ROBOCAR MED AVR (ATMEGA32) MCU: 5 steg
INFRA RÖD FJÄRRKONTROLLerad ROBOCAR MED AVR (ATMEGA32) MCU: 5 steg

Video: INFRA RÖD FJÄRRKONTROLLerad ROBOCAR MED AVR (ATMEGA32) MCU: 5 steg

Video: INFRA RÖD FJÄRRKONTROLLerad ROBOCAR MED AVR (ATMEGA32) MCU: 5 steg
Video: HarvestLab 3000 - En sensor, tre tillämpningar 2024, Juli
Anonim
INFRA RÖD FJÄRRKONTROLLerad ROBOCAR MED AVR (ATMEGA32) MCU
INFRA RÖD FJÄRRKONTROLLerad ROBOCAR MED AVR (ATMEGA32) MCU

Föreliggande PROJEKT beskriver en design och implementering av en infraröd (IR) fjärrstyrd RoboCar som kan användas för olika automatiska obemannade kontrollapplikationer. Jag har designat fjärrstyrd RoboCar (vänster-höger/fram-bak-rörelse). Hela systemet är baserat på mikrokontroller (Atmega32) som gör styrsystemet smartare och lätt att modifiera för andra applikationer. Det gör det möjligt för användaren att styra eller styra en RoboCar och styra strömbrytaren från cirka 5 meter bort.

Nyckelord: IR -avkodare, AVR (Atmega32) mikrokontroller, fjärrkontroll för TV, trådlös kommunikation

_

Steg 1: IntraRed -kommunikation

IntraRed kommunikation
IntraRed kommunikation

IR -kommunikationsprincip:

a) IR -överföring

Sändaren av en IR -LED inuti dess krets, som avger infrarött ljus för varje elektrisk puls som ges till den. Denna puls genereras när en knapp på fjärrkontrollen trycks in, vilket slutför kretsen, vilket ger förspänning till lysdioden. Lysdioden vid förspänning avger ljus med våglängden 940 nm som en serie pulser, motsvarande den tryckta knappen. Men eftersom tillsammans med IR -LED många andra källor till infrarött ljus som oss människor, glödlampor, sol, etc, kan den överförda informationen störas. En lösning på detta problem är genom modulering. Den överförda signalen moduleras med en bärfrekvens på 38 KHz (eller någon annan frekvens mellan 36 och 46 KHz). IR -lysdioden är gjord för att pendla vid denna frekvens under pulsens varaktighet. Informationen eller ljussignalerna är pulsbreddsmodulerade och ingår i 38 KHz -frekvensen. Infraröd överföring avser energi i området för det elektromagnetiska strålningsspektrumet vid våglängder längre än för synligt ljus, men kortare än för radiovågor. På motsvarande sätt är infraröda frekvenser högre än för mikrovågor, men lägre än för synligt ljus. Forskare delar upp det infraröda strålningsspektret (IR) i tre regioner. Våglängderna anges i mikron (symboliserat µ, där 1 µ = 10-6 meter) eller i nanometer (förkortade nm, där 1 nm = 10-9 meter = 0,001 5). Nära IR -bandet innehåller energi i intervallet av våglängder närmast det synliga, från cirka 0,750 till 1,300 500 (750 till 1300 nm). Det mellanliggande IR -bandet (även kallat det mellersta IR -bandet) består av energi i intervallet 1.300 till 3.000 5 (1300 till 3000 nm). Fjärr -IR -bandet sträcker sig från 2.000 till 14.000 5 (3000 nm till 1.4000 x 104nm).

b) IR -mottagning

Mottagaren består av en fotodetektor som utvecklar en elektrisk utsignal när ljus infaller på den. Detektorns utsignal filtreras med ett smalt bandfilter som kasserar alla frekvenser under eller över bärfrekvensen (38 KHz i detta fall). Den filtrerade utmatningen ges sedan till den lämpliga enheten som en mikrokontroller eller en mikroprocessor som styr enheter som en dator eller en robot. Utsignalen från filtren kan också anslutas till oscilloskopet för att läsa av pulserna.

IR -tillämpningar:

Infrarött används i en mängd olika trådlösa kommunikations-, övervaknings- och kontrollapplikationer. Här är några exempel:

· Hem-underhållning fjärrkontroll lådor

· Trådlöst (lokala nätverk)

· Länkar mellan bärbara datorer och stationära datorer

· Sladdlöst modem

· Inbrottsdetektorer

· Rörelsedetektorer

· Brandgivare

· Nattvisionssystem

· Medicinsk diagnostisk utrustning

· Missilstyrningssystem

· Geologiska övervakningsanordningar

Överföring av IR -data från en enhet till en annan kallas ibland för strålning.

Steg 2: IR -sensor och NEC Protocol Fromat

IR -sensor och NEC Protocol Fromat
IR -sensor och NEC Protocol Fromat
IR -sensor och NEC Protocol Fromat
IR -sensor och NEC Protocol Fromat
IR -sensor och NEC Protocol Fromat
IR -sensor och NEC Protocol Fromat
IR -sensor och NEC Protocol Fromat
IR -sensor och NEC Protocol Fromat

IR -sensorer (bild 1)

TSOP1738, SFH-5110-38 (38kHz)

TSOP -sensorer Funktioner:

  • Förförstärkaren och fotodetektorn är båda i ett enda paket
  • Internt filter för PCM -frekvens
  • Förbättrad skydd mot elektriska fältstörningar
  • TTL- och CMOS -kompatibilitet
  • Utgång aktiv låg Låg strömförbrukning
  • Hög immunitet mot omgivande ljus
  • Kontinuerlig dataöverföring möjlig

NEC -protokoll:

NEC IR -överföringsprotokollet använder pulsavståndskodning av meddelandebitarna. Varje pulsskur är 562,5 µs lång, med en bärfrekvens på 38 kHz (26,3 µs). Logiska bitar överförs enligt följande (fig 2):

  • Logiskt '0' - en pulsskurning på 562,5 µs följt av ett utrymme på 562,5 µs, med en total sändningstid på 1,125 ms
  • Logiskt '1' - en pulssprängning på 562,5 μs följt av ett utrymme på 1,6875 ms, med en total sändningstid på 2,25 ms

Bärpulsen består av 21 cykler vid 38 kHz. Pulserna har vanligtvis ett märke/utrymme -förhållande på 1: 4, för att minska strömförbrukningen:

(Fig3)

Varje kodsekvens börjar med en 9ms puls, känd som AGC -pulsen. Detta följs av en tystnad på 4,5 ms:

(Fig4)

Data består sedan av 32 bitar, en 16-bitars adress följt av ett 16-bitars kommando, som visas i den ordning de överförs (vänster till höger):

(Fig5)

De fyra byten med databitar skickas var och en med minst signifikant bit först. Figur 1 illustrerar formatet för en NEC IR -överföringsram för en adress på 00h (00000000b) och ett kommando för ADh (10101101b).

Totalt krävs 67,5 ms för att överföra en meddelanderam. Den behöver 27 ms för att överföra de 16 bitarna av adressen (adress + invers) och de 16 kommandobitarna (kommando + invers).

(Fig6)

Tid som krävs för att överföra ramen:

16 bitar för adressen (adress + invers) kräver 27 ms för att sända tid. Och de 16 bitarna för kommandot (kommando + invers) kräver också 27 ms för att sända tid. eftersom (adress + adress invers) eller (kommando + kommando invers) alltid kommer att innehålla 8 '0s och 8' 1's så (8 * 1.125ms) + (8 * 2.25ms) == 27 ms. enligt denna totala tid som krävs för att överföra ramen är (9ms +4,5ms +27ms +27ms) = 67,5 ms.

REPEAT CODES: Om nyckeln på fjärrkontrollen hålls intryckt kommer en upprepningskod att utfärdas, vanligtvis cirka 40 ms efter pulsutbrottet som innebar slutet på meddelandet. En upprepningskod kommer att fortsätta att skickas ut med 108 ms mellanrum tills nyckeln slutligen släpps. Upprepningskoden består av följande, i ordning:

  • en 9 ms ledande pulsutbrott
  • ett utrymme på 2,25 ms
  • en pulsskurning på 562,5 µs för att markera änden av utrymmet (och därmed slutet av den överförda upprepningskoden).

(Fig7)

Fördröjningsberäkning (1 ms):

Klockfrekvens = 11.0592 Mhz

Maskincykel = 12

Fördröjning = 1 ms

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

= 65536 - 921 = 0xFC67

Steg 3: DC -motorstyrning med L293D

DC -motorstyrning med L293D
DC -motorstyrning med L293D

Likströmsmotor

En likströmsmotor omvandlar elektrisk energi till mekanisk energi som kan användas för att göra många användbara arbeten. Det kan producera mekanisk rörelse som Go Forward/Backword i min RoboCar. DC -motorer finns i olika betyg som 6V och 12V. Den har två trådar eller stift. Vi kan vända rotationsriktningen genom att vända ingångens polaritet.

Här föredrar vi L293D eftersom en rating på 600mA är bra för att driva små likströmsmotorer och skyddsdioder ingår i själva IC: n. Beskrivningen av varje stift är följande: Aktivera stift: Dessa är stift nr. 1 och stift nr. 9. Stift nr. 1 används för att aktivera Half-H-förare 1 och 2. (H-bro på vänster sida). Pin -nr. 9 används för att aktivera H-broförare 3 och 4. (H-bro på höger sida).

Konceptet är enkelt, om du vill använda en viss H -bro måste du ge en hög logik till motsvarande aktiveringsstift tillsammans med strömförsörjningen till IC. Denna stift kan också användas för att styra motorns hastighet med PWM -teknik. VCC1 (stift 16): Strömförsörjningsstift. Anslut den till 5V -nätaggregatet. VCC2 (stift 8): Strömförsörjning för motor. Applicera +ve spänning på den enligt motorns betyg. Om du vill köra din motor på 12V, applicera 12V på denna stift.

Det är också möjligt att driva motorn direkt på ett annat batteri än det som används för att strömförsörja kretsen. Anslut bara +ve -terminalen för det batteriet till VCC2 -stiftet och gör GND för båda batterierna vanliga. (MAX -spänning vid denna pin är 36V enligt dess datablad). GND (Pins 4, 5, 12, 13): Anslut dem till gemensam GND för krets. Ingångar (Pins 2, 7, 10, 15):

Dessa är ingångsstiften genom vilka styrsignaler ges av mikrokontroller eller andra kretsar/IC: er. Till exempel, om vi på stift 2 (ingång för 1: a halva H -drivrutinen) ger Logic 1 (5V), får vi en spänning som är lika med VCC2 på motsvarande utgångsstift på 1: a halva H -drivrutinen, dvs stiftnr. 3. På samma sätt för Logic 0 (0V) på Pin 2 visas 0V på Pin 3. Outputs (Pin 3, 6, 11, 14): Outputs pins. Enligt insignalen kommer utsignalen.

Motorrörelser A B

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

…………… Stopp: Låg: Låg

…… Medsols: Låg: Hög

Moturs: Hög: Låg

……………. Stopp: Hög: Hög

Steg 4: Kretsdiagram för motorförare och IR -sensor

Kretsdiagram för motorförare och IR -sensor
Kretsdiagram för motorförare och IR -sensor
Kretsdiagram för motorförare och IR -sensor
Kretsdiagram för motorförare och IR -sensor
Kretsdiagram för motorförare och IR -sensor
Kretsdiagram för motorförare och IR -sensor

ATmega32 är en CMOS 8-bitars mikrokontroller med låg effekt baserad på AVR-förbättrad RISCarchitecture. Genom att utföra kraftfulla instruktioner i en enda klockcykel uppnår ATmega32 genomströmningar som närmar sig 1 MIPS per MHz så att systemdesignern kan optimera strömförbrukningen kontra bearbetningshastigheten.

AVR -kärnan kombinerar en omfattande instruktionsuppsättning med 32 allmänna arbetsregister. Alla de 32 registren är direkt anslutna till Arithmetic Logic Unit (ALU), så att två oberoende register kan nås i en enda instruktion som utförs i en klockcykel. Den resulterande arkitekturen är mer kodeffektiv samtidigt som den uppnår genomströmningar upp till tio gånger snabbare än konventionella CISC -mikrokontroller.

ATmega32 har följande funktioner:

  • 32 kbyte programmerbart flashprogramminne i systemet med funktioner för läs-medan-skrivning,
  • 1024 byte EEPROM, 2K byte SRAM,
  • 32 I/O -linjer för allmänna ändamål,
  • 32 arbetsregister för allmänna ändamål,
  • ett JTAG -gränssnitt för Boundaryscan,
  • On-chip Debugging-stöd och programmering, tre flexibla timer/räknare med jämförelselägen, interna och externa avbrott, ett seriellt programmerbart USART, ett byteorienterat tvåtrådigt seriellt gränssnitt, ett 8-kanals,
  • 10-bitars ADC med valfritt differentialingångssteg med programmerbar förstärkning (endast TQFP-paket),
  • en programmerbar Watchdog Timer med intern oscillator,
  • en SPI -seriell port och
  • sex valbara energisparlägen för programvara.

    • Tomgångsläget stoppar CPU: n medan USART tillåts,
    • Tvåtrådigt gränssnitt, A/D-omvandlare,
    • SRAM,
    • Timer/räknare,
    • SPI -port och
    • avbryta systemet för att fortsätta fungera.
    • Avstängningsläget sparar registerinnehållet men fryser oscillatorn och inaktiverar alla andra chipfunktioner tills nästa externa avbrott eller maskinvaruåterställning.
    • I energisparläge fortsätter den asynkrona timern att köras, så att användaren kan behålla en timerbas medan resten av enheten sover.
    • ADC -brusreduceringsläget stoppar CPU: n och alla I/O -moduler utom asynkron timer och ADC, för att minimera omkopplingsbrus under ADC -omvandlingar
    • I vänteläge körs kristall/resonatoroscillatorn medan resten av enheten sover. Detta möjliggör mycket snabb start i kombination med låg energiförbrukning.
    • I utökat vänteläge fortsätter både huvudoscillatorn och den asynkrona timern att köras.

Alla relaterade kretsar är ge här och huvudkretsen (atmega32) ges också.

Steg 5: Avr -program

Avr -program
Avr -program
Avr -program
Avr -program

1. För "fjärrsensor":

#inkludera #inkludera

#inkludera "remote.h"

// Globals flyktig osignerad int Time; // Huvudtimer, lagrar tid i 10us, // Uppdaterad av ISR (TIMER0_COMP) flyktig osignerad char BitNo; // Pos av nästa BIT flyktiga osignerade char ByteNo; // Pos av aktuell byte

flyktig osignerad röding IrData [4]; // De fyra databyten för Ir-paket // 2-bytes adress 2-bytes data flyktig osignerad char IrCmdQ [QMAX]; // Slutkommando mottaget (buffert)

flyktig osignerad röding PrevCmd; // Används för upprepning

// Variabler som används för att börja repetera först efter att en knapp har tryckts in under en viss tid

flyktig osignerad röding Upprepa; // 1 = ja 0 = ingen flyktig osignerad char RCount; // Upprepa antal

flyktig röding QFront = -1, QEnd = -1;

flyktig osignerad röding Stat; // Mottagarens tillstånd

flyktig osignerad rödning Edge; // Avbrottets kant [RISING = 1 OR FALLING = 0]

flyktigt osignerat int -stopp;

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

void RemoteInit () {

char i; för (i = 0; i <4; i ++) IrData = 0;

stopp = 0; Tillstånd = IR_VALIDATE_LEAD_HIGH; Kant = 0; Upprepa = 0;

// Inställningstimer1 // ------------ TCCR0 | = ((1 <

TIMSK | = (1 <

OCR0 = TIMER_COMP_VAL; // Ställ in jämförvärde

osignerad char GetRemoteCmd (char wait) {osignerad char cmd;

if (vänta) medan (QFront ==-1); annars om (QFront ==-1) return (RC_NONE);

cmd = IrCmdQ [QFront];

om (QFront == QEnd) QFront = QEnd = -1; annars {if (QFront == (QMAX-1)) QFront = 0; annars QFront ++; }

retur cmd;

}

2. main ():

int main (void) {

uint8_t cmd = 0; DDRB = 0x08;

DDRD = 0x80;

DDRC = 0x0f; PORTC = 0x00;

medan (1) // Infinite Loop till aktiv IR-sensor {

cmd = GetRemoteCmd (1);

switch (cmd) {

fall xx: {// BOT Går framåt // Ch+ btn framåtmotor ();

ha sönder; // Båda motorerna i framåtgående riktning

}

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

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

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

standard: PORTC = 0x00; paus; // Både vänster och höger motor stannar}

}

}/*Slut på huvud*/

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

// Det är en grundläggande modell, men jag kan använda den i PWM -läge.

//…………………………………………….. Ha så kul……………………………………………………//

Rekommenderad: