Inhaltsverzeichnis:

INFRAROT FERNBEDIENTES ROBOCAR MIT AVR (ATMEGA32) MCU - Gunook
INFRAROT FERNBEDIENTES ROBOCAR MIT AVR (ATMEGA32) MCU - Gunook

Video: INFRAROT FERNBEDIENTES ROBOCAR MIT AVR (ATMEGA32) MCU - Gunook

Video: INFRAROT FERNBEDIENTES ROBOCAR MIT AVR (ATMEGA32) MCU - Gunook
Video: LIVE: BAUERNPROTEST & Remigration | DER INFRAROT PODCAST 2024, Juli
Anonim
ROBOCAR MIT INFRAROT-FERNBEDIENUNG MIT AVR (ATMEGA32) MCU
ROBOCAR MIT INFRAROT-FERNBEDIENUNG MIT AVR (ATMEGA32) MCU

Das vorliegende PROJEKT beschreibt das Design und die Implementierung eines infrarot (IR) ferngesteuerten RoboCars, das für verschiedene automatisierte unbemannte Steuerungsanwendungen verwendet werden kann. Ich habe ferngesteuertes RoboCar entworfen (links-rechts/vorne-hinten-Bewegung). Das gesamte System basiert auf einem Mikrocontroller (Atmega32), der das Steuerungssystem intelligenter und einfach für andere Anwendungen modifizierbar macht. Es ermöglicht dem Benutzer, ein RoboCar zu bedienen oder zu steuern und den Netzschalter aus etwa 5 Metern Entfernung zu betätigen.

Schlüsselwörter: IR-Decoder, AVR (Atmega32) Mikrocontroller, TV-Fernbedienung, Drahtlose Kommunikation

_

Schritt 1: IntraRed-Kommunikation

IntraRed-Kommunikation
IntraRed-Kommunikation

IR-Kommunikationsprinzip:

a) IR-Übertragung

Der Sender einer IR-LED in seinem Stromkreis, der für jeden ihm gegebenen elektrischen Impuls Infrarotlicht aussendet. Dieser Impuls wird erzeugt, wenn eine Taste auf der Fernbedienung gedrückt wird, wodurch der Stromkreis geschlossen wird und die LED mit Vorspannung versorgt wird. Die vorgespannte LED emittiert Licht mit einer Wellenlänge von 940 nm als eine Reihe von Impulsen, die der gedrückten Taste entsprechen. Da jedoch neben der IR-LED viele andere Infrarotlichtquellen wie wir Menschen, Glühbirnen, Sonne usw. die übertragenen Informationen stören können. Eine Lösung für dieses Problem ist die Modulation. Das übertragene Signal wird mit einer Trägerfrequenz von 38 KHz (oder jeder anderen Frequenz zwischen 36 bis 46 KHz) moduliert. Die IR-LED wird mit dieser Frequenz für die Zeitdauer des Impulses zum Schwingen gebracht. Die Informationen bzw. die Lichtsignale sind pulsweitenmoduliert und in der 38 KHz Frequenz enthalten. Infrarotübertragung bezieht sich auf Energie im Bereich des elektromagnetischen Strahlungsspektrums bei Wellenlängen, die länger sind als die des sichtbaren Lichts, aber kürzer als die von Radiowellen. Dementsprechend sind die Infrarotfrequenzen höher als die von Mikrowellen, aber niedriger als die des sichtbaren Lichts. Wissenschaftler teilen das Spektrum der Infrarotstrahlung (IR) in drei Bereiche ein. Die Wellenlängen werden in Mikrometer (symbolisiert µ, wobei 1 µ = 10-6 Meter) oder in Nanometern (abgekürzt nm, mit 1 nm = 10-9 Meter = 0,001 5) angegeben. Das nahe IR-Band enthält Energie im Wellenlängenbereich, der dem sichtbaren am nächsten ist, von ungefähr 0,750 bis 1,300 5 (750 bis 1300 nm). Das mittlere IR-Band (auch mittleres IR-Band genannt) besteht aus einer Energie im Bereich von 1.300 bis 3.000 5 (1300 bis 3000 nm). Das ferne IR-Band reicht von 2.000 bis 14.000 5 (3000 nm bis 1,4000 x 104 nm).

b) IR-Empfang

Der Empfänger besteht aus einem Fotodetektor, der ein elektrisches Ausgangssignal erzeugt, wenn Licht darauf einfällt. Die Ausgabe des Detektors wird unter Verwendung eines Schmalbandfilters gefiltert, das alle Frequenzen unterhalb oder oberhalb der Trägerfrequenz (in diesem Fall 38 KHz) verwirft. Die gefilterte Ausgabe wird dann an das geeignete Gerät wie einen Mikrocontroller oder einen Mikroprozessor gegeben, der Geräte wie einen PC oder einen Roboter steuert. Der Ausgang der Filter kann auch an das Oszilloskop angeschlossen werden, um die Impulse zu lesen.

Anwendungen von IR:

Infrarot wird in einer Vielzahl von drahtlosen Kommunikations-, Überwachungs- und Steuerungsanwendungen verwendet. Hier sind einige Beispiele:

· Home-Entertainment-Fernbedienungsboxen

· Drahtlos (lokale Netzwerke)

· Verbindungen zwischen Notebook-Computern und Desktop-Computern

· Schnurloses Modem

· Einbruchmelder

· Bewegungsmelder

· Brandmelder

· Nachtsichtsysteme

· Medizinische Diagnosegeräte

· Raketenleitsysteme

· Geologische Überwachungsgeräte

Das Übertragen von IR-Daten von einem Gerät zum anderen wird manchmal als Beamen bezeichnet.

Schritt 2: IR-Sensor & NEC-Protokoll Fromat

IR-Sensor & NEC-Protokoll Fromat
IR-Sensor & NEC-Protokoll Fromat
IR-Sensor & NEC-Protokoll Fromat
IR-Sensor & NEC-Protokoll Fromat
IR-Sensor & NEC-Protokoll Fromat
IR-Sensor & NEC-Protokoll Fromat
IR-Sensor & NEC-Protokoll Fromat
IR-Sensor & NEC-Protokoll Fromat

IR-Sensoren (Abb.1)

TSOP1738, SFH-5110-38 (38kHz)

TSOP-Sensoren Eigenschaften:

  • Der Vorverstärker und der Fotodetektor befinden sich beide in einem einzigen Paket
  • Interner Filter für PCM-Frequenz
  • Verbesserte Abschirmung gegen elektrische Feldstörungen
  • TTL- und CMOS-Kompatibilität
  • Ausgang aktiv niedrig Geringer Stromverbrauch
  • Hohe Immunität gegen Umgebungslicht
  • Kontinuierliche Datenübertragung möglich

NEC-Protokoll:

Das NEC IR-Übertragungsprotokoll verwendet eine Impulsabstandscodierung der Nachrichtenbits. Jeder Impulsburst hat eine Länge von 562,5 µs bei einer Trägerfrequenz von 38 kHz (26,3 µs). Logische Bits werden wie folgt übertragen (Abb2):

  • Logische '0' – ein 562,5-µs-Pulsburst gefolgt von einem 562,5-µs-Abstand mit einer Gesamtübertragungszeit von 1,125 ms
  • Logische '1' – ein 562,5-µs-Pulsburst gefolgt von einem 1,6875-ms-Raum mit einer Gesamtübertragungszeit von 2,25 ms

Der Trägerpuls besteht aus 21 Zyklen bei 38 kHz. Die Impulse haben in der Regel ein Tastverhältnis von 1:4, um die Stromaufnahme zu reduzieren:

(Abb. 3)

Jede Codesequenz beginnt mit einem 9-ms-Impuls, dem sogenannten AGC-Impuls. Es folgt eine 4,5 ms lange Stille:

(Abb.4)

Die Daten bestehen dann aus 32 Bit, einer 16-Bit-Adresse gefolgt von einem 16-Bit-Befehl, dargestellt in der Reihenfolge der Übertragung (von links nach rechts):

(Abb.5)

Die vier Bytes von Datenbits werden jeweils zuerst das niedrigstwertige Bit gesendet. 1 veranschaulicht das Format eines NEC IR-Übertragungsrahmens für eine Adresse von 00h (00000000b) und einen Befehl von ADh (10101101b).

Für die Übertragung eines Telegramms werden insgesamt 67,5 ms benötigt. Es benötigt 27 ms, um die 16 Bits der Adresse (Adresse + invers) und die 16 Bits des Befehls (Befehl + invers) zu übertragen.

(Abb.6)

Erforderliche Zeit zum Senden des Frames:

16 Bits für die Adresse (Adresse + Invers) benötigen 27 ms Sendezeit und die 16 Bits für den Befehl (Befehl + Invers) benötigen ebenfalls 27 ms Sendezeit. weil (Adresse + Adresse invers) oder (Befehl+Befehl invers) immer 8 '0's und 8'1's enthalten, also (8 * 1,125ms) + (8 * 2,25ms) == 27 ms. entsprechend dieser Gesamtzeit, die zum Senden des Rahmens erforderlich ist, beträgt (9 ms + 4,5 ms + 27 ms + 27 ms) = 67,5 ms.

WIEDERHOLUNGSCODES: Wenn die Taste auf der Fernbedienung gedrückt gehalten wird, wird ein Wiederholungscode ausgegeben, normalerweise etwa 40 ms nach dem Impulsstoß, der das Ende der Nachricht anzeigt. Ein Wiederholungscode wird weiterhin in Intervallen von 108 ms gesendet, bis die Taste endgültig losgelassen wird. Der Wiederholungscode besteht in der folgenden Reihenfolge aus:

  • ein 9ms führender Impulsburst
  • ein 2,25 ms Leerzeichen
  • ein 562,5-µs-Impulsburst, um das Ende des Zwischenraums (und damit das Ende des übertragenen Wiederholungscodes) zu markieren.

(Abb.7)

Berechnung der Verzögerung (1ms):

Taktfrequenz = 11,0592 Mhz

Maschinenzyklus = 12

Verzögerung=1ms

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

= 65536 - 921= 0xFC67

Schritt 3: DC-Motorsteuerung mit L293D

DC-Motorsteuerung mit L293D
DC-Motorsteuerung mit L293D

Gleichspannungs Motor

Ein Gleichstrommotor wandelt elektrische Energie in mechanische Energie um, die für viele nützliche Arbeiten verwendet werden kann. Es kann mechanische Bewegungen wie Go Forward/Backword meines RoboCar erzeugen. Gleichstrommotoren gibt es in verschiedenen Nennleistungen wie 6V und 12V. Es hat zwei Drähte oder Stifte. Wir können die Drehrichtung umkehren, indem wir die Polarität des Eingangs umkehren.

Hier bevorzugen wir L293D, da eine Nennleistung von 600 mA gut zum Antreiben kleiner Gleichstrommotoren ist und Schutzdioden im IC selbst enthalten sind. Die Beschreibung jedes Pins lautet wie folgt: Enable-Pins: Dies sind Pin-Nr. 1 und Pin-Nr. 9. Pin-Nr. 1 wird verwendet, um Half-H-Treiber 1 und 2 zu aktivieren. (H-Brücke auf der linken Seite). Pin-Nr. 9 wird verwendet, um die H-Brückentreiber 3 und 4 zu aktivieren (H-Brücke auf der rechten Seite).

Das Konzept ist einfach, wenn Sie eine bestimmte H-Brücke verwenden möchten, müssen Sie den entsprechenden Enable-Pins zusammen mit der Stromversorgung des ICs eine hohe Logik zuweisen. Dieser Pin kann auch verwendet werden, um die Geschwindigkeit des Motors mit PWM-Technik zu steuern. VCC1 (Pin 16): Stromversorgungspin. Schließen Sie es an eine 5V-Versorgung an. VCC2 (Pin 8): Stromversorgung für Motor. Legen Sie eine +ve-Spannung gemäß der Motorleistung an. Wenn Sie Ihren Motor mit 12V betreiben möchten, legen Sie 12V an diesem Pin an.

Es ist auch möglich, den Motor direkt mit einer Batterie zu betreiben, die nicht zur Stromversorgung des Stromkreises verwendet wird. Verbinden Sie einfach den +ve-Anschluss dieser Batterie mit dem VCC2-Pin und machen Sie GND beider Batterien gemeinsam. (Die MAX-Spannung an diesem Pin beträgt 36 V gemäß Datenblatt). GND (Pins 4, 5, 12, 13): Verbinden Sie sie mit dem gemeinsamen GND der Schaltung. Eingänge (Pins 2, 7, 10, 15):

Dies sind Eingangspins, über die Steuersignale von Mikrocontrollern oder anderen Schaltungen/ICs gegeben werden. Wenn wir beispielsweise an Pin 2 (Eingang des H-Treibers der 1. Hälfte) Logik 1 (5 V) geben, erhalten wir eine Spannung gleich VCC2 am entsprechenden Ausgangspin des H-Treibers der 1. Hälfte, d. 3. Analog wird für Logik 0 (0 V) an Pin 2 0 V an Pin 3 angezeigt. Ausgänge (Pin 3, 6, 11, 14): Ausgangspins. Entsprechend dem Eingangssignal kommt das Ausgangssignal.

Motorische Bewegungen A B

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

……………Stopp: Niedrig: Niedrig

……Im Uhrzeigersinn: Niedrig: Hoch

Gegen den Uhrzeigersinn: Hoch: Niedrig

……………. Stopp: Hoch: Hoch

Schritt 4: Schaltpläne für Motortreiber und IR-Sensor

Schaltpläne für Motortreiber und IR-Sensor
Schaltpläne für Motortreiber und IR-Sensor
Schaltpläne für Motortreiber und IR-Sensor
Schaltpläne für Motortreiber und IR-Sensor
Schaltpläne für Motortreiber und IR-Sensor
Schaltpläne für Motortreiber und IR-Sensor

Der ATmega32 ist ein stromsparender CMOS-8-Bit-Mikrocontroller, der auf der AVR-erweiterten RISC-Architektur basiert. Durch die Ausführung leistungsstarker Befehle in einem einzigen Taktzyklus erreicht der ATmega32 Durchsätze von annähernd 1 MIPS pro MHz und ermöglicht es dem Systemdesigner, den Stromverbrauch im Vergleich zur Verarbeitungsgeschwindigkeit zu optimieren.

Der AVR-Kern kombiniert einen umfangreichen Befehlssatz mit 32 Allzweck-Arbeitsregistern. Alle 32 Register sind direkt mit der Arithmetic Logic Unit (ALU) verbunden, was den Zugriff auf zwei unabhängige Register in einem einzigen Befehl ermöglicht, der in einem Taktzyklus ausgeführt wird. Die resultierende Architektur ist codeeffizienter und erreicht bis zu zehnmal schnellere Durchsätze als herkömmliche CISC-Mikrocontroller.

Der ATmega32 bietet die folgenden Funktionen:

  • 32 KB In-System Programmable Flash-Programmspeicher mit Read-While-Write-Fähigkeiten,
  • 1024 Byte EEPROM, 2 KByte SRAM,
  • 32 Universal-I/O-Leitungen,
  • 32 allgemeine Arbeitsregister,
  • eine JTAG-Schnittstelle für Boundaryscan,
  • On-Chip-Debugging-Unterstützung und -Programmierung, drei flexible Timer/Counter mit Vergleichsmodi, interne und externe Interrupts, eine seriell programmierbare USART, eine byteorientierte serielle Zweidraht-Schnittstelle, eine 8-Kanal-,
  • 10-Bit-ADC mit optionaler Differenzeingangsstufe mit programmierbarer Verstärkung (nur TQFP-Paket),
  • ein programmierbarer Watchdog-Timer mit internem Oszillator,
  • einen seriellen SPI-Port und
  • sechs per Software wählbare Energiesparmodi.

    • Der Idle-Modus stoppt die CPU, während die USART,
    • Zweidraht-Schnittstelle, A/D-Wandler,
    • SRAM,
    • Timer/Zähler,
    • SPI-Port und
    • System unterbrechen, um weiter zu funktionieren.
    • Der Power-Down-Modus speichert den Registerinhalt, friert jedoch den Oszillator ein und deaktiviert alle anderen Chipfunktionen bis zum nächsten externen Interrupt oder Hardware-Reset.
    • Im Energiesparmodus läuft der asynchrone Timer weiter, sodass der Benutzer eine Timer-Basis beibehalten kann, während der Rest des Geräts im Ruhezustand ist.
    • Der ADC-Rauschunterdrückungsmodus stoppt die CPU und alle E/A-Module außer Asynchronous Timer und ADC, um das Schaltrauschen während der ADC-Wandlung zu minimieren
    • Im Standby-Modus läuft der Quarz-/Resonator-Oszillator, während der Rest des Geräts schläft. Dies ermöglicht eine sehr schnelle Inbetriebnahme bei geringem Stromverbrauch.
    • Im erweiterten Standby-Modus laufen sowohl der Hauptoszillator als auch der asynchrone Timer weiter.

Alle zugehörigen Stromkreise sind hier angegeben und der Hauptstromkreis (atmega32) ist ebenfalls angegeben.

Schritt 5: Avr-Programme

Avr-Programme
Avr-Programme
Avr-Programme
Avr-Programme

1. Für "Fernsensor":

#einschließen #einschließen

#include "remote.h"

//Globale volatile unsigned int Time; //Hauptzeitgeber, speichert Zeit in 10us, //Aktualisiert von ISR(TIMER0_COMP) volatile unsigned char BitNo; //Pos des nächsten BIT volatile unsigned char ByteNo; //Pos des aktuellen Bytes

flüchtiges unsigned char IrData[4]; //Die vier Datenbytes des Ir-Pakets //2-Byte-Adresse 2-Byte-Daten volatile unsigned char IrCmdQ[QMAX];//Endbefehl empfangen (Puffer)

volatile unsigned char PrevCmd; // Wird für die Wiederholung verwendet

//Variablen, die verwendet werden, um die Wiederholung erst zu starten, nachdem eine Taste für eine bestimmte Zeit gedrückt wurde

flüchtiges unsigned char Wiederholen; //=ja 0=kein flüchtiges unsigned char RCount; // Zählung wiederholen

flüchtiges Zeichen QFront=-1, QEnd=-1;

volatile unsigned char State; //Zustand des Empfängers

flüchtiges unsigned char Edge; //Flanke des Interrupts [RISING=1 OR FALLING=0]

volatile unsigned int stop;

/************************************************ ********************************************/ /* FUNKTIONEN BEGINNT * / /************************************************ *************************************************/

void RemoteInit() {

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

halt=0; Status=IR_VALIDATE_LEAD_HIGH; Kante = 0; Wiederholen=0;

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

TIMSK|=(1<

OCR0=TIMER_COMP_VAL; // Vergleichswert einstellen

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

if(warten) while(QFront==-1); sonst if(QFront==-1) return (RC_NONE);

cmd=IrCmdQ[QFront];

if(QFront==QEnd) QFront=QEnd=-1; else { if(QFront==(QMAX-1)) QFront=0; sonst QFront++; }

Befehl zurückgeben;

}

2. main():

int main(void){

uint8_t cmd=0; DDRB=0x08;

DDRD=0x80;

DDRC=0x0f; PORTC=0x00;

while (1) // Endlosschleife zum aktiven IR-Sensor {

cmd=GetRemoteCmd(1);

Schalter (cmd) {

case xx: { //BOT bewegt sich vorwärts //Ch+ btn forwardmotor();

brechen; // Beide Motoren in Vorwärtsrichtung

}

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

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

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

Standard: PORTC=0x00;Unterbrechung; // Sowohl der linke als auch der rechte Motor halten an}

}

}/*Ende von main*/

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

// Es ist ein Basismodell, aber ich kann es im PWM-Modus verwenden.

//…………………………………………….. Spaß haben……………………………………………………//

Empfohlen: