Inhoudsopgave:

INFRAROOD OP AFSTAND BESTUURDE ROBOCAR MET AVR (ATMEGA32) MCU - Ajarnpa
INFRAROOD OP AFSTAND BESTUURDE ROBOCAR MET AVR (ATMEGA32) MCU - Ajarnpa

Video: INFRAROOD OP AFSTAND BESTUURDE ROBOCAR MET AVR (ATMEGA32) MCU - Ajarnpa

Video: INFRAROOD OP AFSTAND BESTUURDE ROBOCAR MET AVR (ATMEGA32) MCU - Ajarnpa
Video: CHD-PTZ2 bestuurbare 1080p full HD IP camera met infrarood 2024, November
Anonim
INFRAROOD OP AFSTAND BESTUURDE ROBOCAR MET AVR (ATMEGA32) MCU
INFRAROOD OP AFSTAND BESTUURDE ROBOCAR MET AVR (ATMEGA32) MCU

Dit PROJECT beschrijft een ontwerp en implementatie van een infrarood (IR) op afstand bestuurbare RoboCar die kan worden gebruikt voor verschillende geautomatiseerde onbemande besturingstoepassingen. Ik heb op afstand bestuurbare RoboCar ontworpen (beweging links-rechts/voor-achter). Het hele systeem is gebaseerd op een microcontroller (Atmega32) die het besturingssysteem slimmer en makkelijk aanpasbaar maakt voor andere toepassingen. Het stelt de gebruiker in staat om een RoboCar te bedienen of te bedienen en de netschakelaar te bedienen vanaf ongeveer 5 meter afstand.

Trefwoorden: IR-decoder, AVR (Atmega32) microcontroller, tv-afstandsbediening, draadloze communicatie

_

Stap 1: IntraRed-communicatie

IntraRed-communicatie
IntraRed-communicatie

IR Communicatie principe:

a) IR-transmissie

De zender van een IR-LED in zijn circuit, die infrarood licht uitzendt voor elke elektrische puls die eraan wordt gegeven. Deze puls wordt gegenereerd als een knop op de afstandsbediening wordt ingedrukt, waardoor het circuit wordt voltooid en de LED wordt vooringenomen. De LED zendt bij vooringenomenheid licht uit met een golflengte van 940 nm als een reeks pulsen, overeenkomend met de ingedrukte knop. Maar aangezien samen met de IR-LED vele andere bronnen van infrarood licht, zoals wij mensen, gloeilampen, zon, enz., de verzonden informatie kan worden verstoord. Een oplossing voor dit probleem is door modulatie. Het uitgezonden signaal wordt gemoduleerd met een draaggolffrequentie van 38 KHz (of een andere frequentie tussen 36 en 46 KHz). De IR-LED is gemaakt om op deze frequentie te oscilleren gedurende de tijdsduur van de puls. De informatie of de lichtsignalen zijn pulsbreedte gemoduleerd en bevinden zich in de 38 KHz frequentie. Infraroodtransmissie verwijst naar energie in het gebied van het elektromagnetische stralingsspectrum bij golflengten die langer zijn dan die van zichtbaar licht, maar korter dan die van radiogolven. Dienovereenkomstig zijn infraroodfrequenties hoger dan die van microgolven, maar lager dan die van zichtbaar licht. Wetenschappers verdelen het infraroodstralingsspectrum (IR) in drie regio's. De golflengten worden aangegeven in microns (gesymboliseerd µ, waarbij 1 µ = 10-6 meter) of in nanometers (afgekort nm, waarbij 1 nm = 10-9 meter = 0,0015). De nabije IR-band bevat energie in het golflengtebereik dat het dichtst bij het zichtbare ligt, van ongeveer 0,750 tot 1.300 5 (750 tot 1300 nm). De tussenliggende IR-band (ook wel de middelste IR-band genoemd) bestaat uit energie in het bereik van 1.300 tot 3.000 5 (1300 tot 3000 nm). De verre IR-band strekt zich uit van 2.000 tot 14.000 5 (3000 nm tot 1.4000 x 104nm).

b) IR-ontvangst

De ontvanger bestaat uit een fotodetector die een elektrisch uitgangssignaal ontwikkelt als er licht op valt. De uitvoer van de detector wordt gefilterd met behulp van een smalbandfilter dat alle frequenties onder of boven de draaggolffrequentie (38 KHz in dit geval) weggooit. De gefilterde output wordt dan gegeven aan het geschikte apparaat zoals een microcontroller of een microprocessor die apparaten zoals een pc of een robot bestuurt. De uitgang van de filters kan ook worden aangesloten op de oscilloscoop om de pulsen te lezen.

Toepassingen van IR:

Infrarood wordt gebruikt in een verscheidenheid aan draadloze communicatie-, bewakings- en besturingstoepassingen. Hier zijn enkele voorbeelden:

· Home-entertainment afstandsbedieningen

· Draadloos (lokale netwerken)

· Koppelingen tussen notebookcomputers en desktopcomputers

· Draadloze modem

· Inbraakdetectoren

· Bewegingsdetectoren

· Brandsensoren

· Nachtzichtsystemen

· Medische diagnostische apparatuur

· Raketgeleidingssystemen

· Geologische bewakingsapparatuur

Het verzenden van IR-gegevens van het ene apparaat naar het andere wordt soms aangeduid als stralen.

Stap 2: IR-sensor & NEC-protocol Fromat

IR-sensor & NEC-protocol Fromat
IR-sensor & NEC-protocol Fromat
IR-sensor & NEC-protocol Fromat
IR-sensor & NEC-protocol Fromat
IR-sensor & NEC-protocol Fromat
IR-sensor & NEC-protocol Fromat
IR-sensor & NEC-protocol Fromat
IR-sensor & NEC-protocol Fromat

IR-sensoren (Fig1)

TSOP1738, SFH-5110-38 (38 kHz)

TSOP-sensoren Kenmerken:

  • De voorversterker en fotodetector zitten beide in één pakket
  • Intern filter voor PCM-frequentie
  • Verbeterde afscherming tegen elektrische veldstoringen
  • TTL- en CMOS-compatibiliteit
  • Uitgang actief laag Laag stroomverbruik
  • Hoge immuniteit tegen omgevingslicht
  • Continue gegevensoverdracht mogelijk

NEC-protocol:

Het NEC IR-transmissieprotocol maakt gebruik van pulsafstandscodering van de berichtbits. Elke pulsburst is 562,5 µs lang, bij een draaggolffrequentie van 38 kHz (26,3 µs). Logische bits worden als volgt verzonden (Fig 2):

  • Logische '0' – een pulssalvo van 562,5 µs gevolgd door een ruimte van 562,5 µs, met een totale zendtijd van 1,125 ms
  • Logische '1' - een pulssalvo van 562,5 µs gevolgd door een ruimte van 1,6875 ms, met een totale zendtijd van 2,25 ms

De draaggolfpuls bestaat uit 21 cycli bij 38 kHz. De pulsen hebben meestal een mark/space-verhouding van 1:4, om het stroomverbruik te verminderen:

(Afb.3)

Elke codereeks begint met een puls van 9 ms, ook wel de AGC-puls genoemd. Dit wordt gevolgd door een stilte van 4,5 ms:

(Afb.4)

De gegevens bestaan dan uit 32 bits, een 16-bits adres gevolgd door een 16-bits commando, weergegeven in de volgorde waarin ze worden verzonden (van links naar rechts):

(Afb.5)

De vier bytes aan databits worden elk het minst significante bit eerst verzonden. Figuur 1 illustreert het formaat van een NEC IR-transmissieframe, voor een adres van 00h(00000000b) en een commando van ADh (10101101b).

Er is in totaal 67,5 ms nodig om een berichtframe te verzenden. Het heeft 27 ms nodig om de 16 bits adres (adres + inverse) en de 16 bits commando (commando + inverse) te verzenden.

(Afb.6)

Tijd die nodig is om het frame te verzenden:

16 bits voor het adres (adres + invers) hebben 27 ms nodig om tijd te verzenden en de 16 bits voor het commando (commando + invers) hebben ook 27 ms nodig om tijd te verzenden. omdat (adres + adres inverse) of (commando+commando inverse) altijd 8 '0's en 8'1's zal bevatten dus (8 * 1.125ms) + (8 * 2.25ms) == 27 ms. volgens deze totale tijd die nodig is om het frame te verzenden is (9ms +4,5ms +27ms+27ms) = 67,5 ms.

HERHAALDE CODES: Als de toets op de afstandsbediening ingedrukt wordt gehouden, wordt een herhaalcode afgegeven, meestal ongeveer 40 ms na de puls die het einde van het bericht betekende. Er wordt een herhaalcode verzonden met intervallen van 108 ms, totdat de toets definitief wordt losgelaten. De herhaalcode bestaat uit het volgende, in volgorde:

  • een voorlooppuls van 9 ms
  • een ruimte van 2,25 ms
  • een pulsuitbarsting van 562,5 µs om het einde van de spatie te markeren (en dus het einde van de verzonden herhaalcode).

(Afb.7)

Vertragingsberekening (1 ms):

Klokfreq = 11.0592 Mhz

Machinecyclus = 12

Vertraging=1ms

TimerWaarde= 65536 - ((Vertraging * Klokfrequentie)/Machinecyclus)=65536-((1ms * 11.0592Mhz)/12)

= 65536 - 921= 0xFC67

Stap 3: DC-motorbesturing met L293D

DC-motorbesturing met L293D
DC-motorbesturing met L293D

gelijkstroommotor

Een DC-motor zet elektrische energie om in mechanische energie die kan worden gebruikt om veel nuttige werkzaamheden uit te voeren. Het kan mechanische bewegingen produceren zoals Go Forward/Backword van mijn RoboCar. DC-motoren zijn er in verschillende classificaties, zoals 6V en 12V. Het heeft twee draden of pinnen. We kunnen de draairichting omkeren door de polariteit van de ingang om te keren.

Hier geven we de voorkeur aan L293D omdat een classificatie van 600mA goed is voor het aansturen van kleine DC-motoren en beveiligingsdiodes zijn opgenomen in de IC zelf. De beschrijving van elke pin is als volgt:Pins inschakelen: Dit zijn pinnr. 1 en pinnr. 9. Pinnr. 1 wordt gebruikt om Half-H driver 1 en 2 in te schakelen (H-brug aan de linkerkant). Pin nr. 9 wordt gebruikt om H-bridge driver 3 en 4 in te schakelen (H-bridge aan de rechterkant).

Het concept is eenvoudig, als je een bepaalde H-brug wilt gebruiken, moet je een hoge logica geven aan de bijbehorende activeringspinnen samen met de voeding naar de IC. Deze pin kan ook worden gebruikt om de snelheid van de motor te regelen met behulp van PWM-techniek. VCC1 (Pin 16): Voedingspin. Sluit hem aan op 5V voeding. VCC2 (Pin 8): Voeding voor motor. Breng er +ve spanning op aan volgens het motorvermogen. Als u uw motor op 12V wilt laten rijden, past u 12V toe op deze pin.

Het is ook mogelijk om de motor rechtstreeks op een batterij aan te drijven, anders dan degene die wordt gebruikt voor het leveren van stroom aan het circuit. Sluit gewoon de +ve-terminal van die batterij aan op de VCC2-pin en maak GND van beide batterijen gemeenschappelijk. (MAX spanning op deze pin is 36V volgens de datasheet). GND (Pins 4, 5, 12, 13): Sluit ze aan op de gemeenschappelijke GND van het circuit. Ingangen (Pins 2, 7, 10, 15):

Dit zijn ingangspinnen waarmee stuursignalen worden gegeven door microcontrollers of andere circuits/IC's. Als we bijvoorbeeld op pin 2 (ingang van 1e halve H-driver) Logic 1 (5V) geven, krijgen we een spanning gelijk aan VCC2 op de overeenkomstige uitgangspin van de 1e helft H-driver, d.w.z. pin nr. 3. Evenzo voor Logic 0 (0V) op Pin 2, 0V op Pin 3 verschijnt. Uitgangen (Pin 3, 6, 11, 14): Uitgangen pinnen. Volgens het ingangssignaal komt het uitgangssignaal.

Motorische bewegingen A B

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

………… Stop: Laag: Laag

……Met de klok mee: Laag: Hoog

Tegen de klok in: Hoog: Laag

…………. Stop: Hoog: Hoog

Stap 4: Schakelschema's voor motorstuurprogramma en IR-sensor

Schakelschema's voor motorstuurprogramma en IR-sensor
Schakelschema's voor motorstuurprogramma en IR-sensor
Schakelschema's voor motorstuurprogramma en IR-sensor
Schakelschema's voor motorstuurprogramma en IR-sensor
Schakelschema's voor motorstuurprogramma en IR-sensor
Schakelschema's voor motorstuurprogramma en IR-sensor

De ATmega32 is een low-power CMOS 8-bit microcontroller gebaseerd op de AVR verbeterde RISC-architectuur. Door krachtige instructies in een enkele klokcyclus uit te voeren, bereikt de ATmega32 doorvoersnelheden van bijna 1 MIPS per MHz, waardoor de systeemontwerper het stroomverbruik versus de verwerkingssnelheid kan optimaliseren.

De AVR-kern combineert een uitgebreide instructieset met 32 algemene werkregisters. Alle 32 registers zijn direct verbonden met de Arithmetic Logic Unit (ALU), waardoor twee onafhankelijke registers toegankelijk zijn in één enkele instructie die in één klokcyclus wordt uitgevoerd. De resulterende architectuur is code-efficiënter en bereikt doorvoersnelheden tot tien keer sneller dan conventionele CISC-microcontrollers.

De ATMega32 biedt de volgende functies:

  • 32 Kbyte In-System Programmeerbaar Flash-programmageheugen met Read-While-Write-mogelijkheden,
  • 1024 bytes EEPROM, 2K byte SRAM,
  • 32 algemene I/O-lijnen,
  • 32 werkregisters voor algemene doeleinden,
  • een JTAG-interface voor Boundaryscan,
  • Ondersteuning en programmering voor foutopsporing op de chip, drie flexibele timers/tellers met vergelijkingsmodi, interne en externe onderbrekingen, een serieel programmeerbare USART, een byte-georiënteerde tweedraads seriële interface, een 8-kanaals,
  • 10-bit ADC met optionele differentiële ingangstrap met programmeerbare versterking (alleen TQFP-pakket),
  • een programmeerbare Watchdog Timer met interne oscillator,
  • een SPI seriële poort, en
  • zes software selecteerbare energiebesparende modi.

    • De Idle-modus stopt de CPU terwijl de USART,
    • Tweedraads interface, A/D-converter,
    • SRAM,
    • Timer/Tellers,
    • SPI-poort, en
    • onderbreek het systeem om te blijven functioneren.
    • De Power-down-modus slaat de registerinhoud op, maar bevriest de oscillator, waardoor alle andere chipfuncties worden uitgeschakeld tot de volgende externe onderbreking of hardwarereset.
    • In de energiebesparende modus blijft de asynchrone timer lopen, zodat de gebruiker een timerbasis kan behouden terwijl de rest van het apparaat slaapt.
    • De ADC-ruisonderdrukkingsmodus stopt de CPU en alle I/O-modules behalve Asynchronous Timer en ADC, om schakelruis tijdens ADC-conversies te minimaliseren
    • In de stand-bymodus werkt de kristal-/resonatoroscillator terwijl de rest van het apparaat slaapt. Dit maakt een zeer snelle opstart mogelijk in combinatie met een laag stroomverbruik.
    • In de uitgebreide stand-bymodus blijven zowel de hoofdoscillator als de asynchrone timer lopen.

Alle gerelateerde circuits worden hier gegeven en het hoofdcircuit (atmega32) wordt ook gegeven.

Stap 5: Avr-programma's

Avr-programma's
Avr-programma's
Avr-programma's
Avr-programma's

1. Voor "sensor op afstand":

#include #include

#include "remote.h"

//Globals vluchtige unsigned int Time; //Hoofdtimer, slaat tijd op in 10us, // Bijgewerkt door ISR (TIMER0_COMP) vluchtige niet-ondertekende char BitNo; // Pos van volgende BIT vluchtige unsigned char ByteNo; //Pos van huidige byte

vluchtige niet-ondertekende char IrData[4]; //De vier databytes van Ir Packet //2-Byte Address 2-Byte Data vluchtige niet-ondertekende char IrCmdQ[QMAX];//Final Command Received (Buffer)

vluchtige unsigned char PrevCmd; // Gebruikt voor herhaling

// Variabelen die worden gebruikt om te beginnen met herhalen alleen nadat een bepaalde tijd op een toets is gedrukt

vluchtige unsigned char Herhaal; //1=ja 0=geen vluchtige unsigned char RCount; // Herhaal telling

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

vluchtige unsigned char Staat; // Staat van ontvanger

vluchtige niet-ondertekende char Edge; // Rand van onderbreking [RISING=1 OF DALING=0]

vluchtige niet-ondertekende int stop;

/************************************************** *********************************************/ /* FUNCTIES BEGINT * / /************************************************** *********************************************/

ongeldig RemoteInit() {

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

stop=0; Staat=IR_VALIDATE_LEAD_HIGH; Rand = 0; Herhalen=0;

//Insteltimer1 //------------ TCCR0|=((1<

TIMSK|=(1<

OCR0=TIMER_COMP_VAL; //Stel vergelijkingswaarde in

unsigned char GetRemoteCmd (char wacht) { unsigned char cmd;

if(wacht) 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; anders QFront++; }

retour cmd;

}

2. hoofd():

int main(void){

uint8_t cmd=0; DDRB=0x08;

DDRD=0x80;

DDRC=0x0f; PORTC=0x00;

while (1) // Oneindige lus naar actieve IR-sensor {

cmd=GetRemoteCmd(1);

schakelaar (cmd) {

case xx: { // BOT gaat vooruit // Ch + btn forwardmotor ();

pauze; // Beide motoren in voorwaartse richting

}

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

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

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

standaard: PORTC=0x00;pauze; // Zowel de linker als de rechter motor stoppen }

}

}/*Einde van hoofd*/

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

// Het is een basismodel, maar ik kan het gebruiken in de PWM-modus.

//…………………………………………….. Veel plezier……………………………………………………//

Aanbevolen: