Cuprins:

ROBOCAR CONTROLAT DE LA DISTANȚĂ INFRA RED CU UTILIZARE MCU AVR (ATMEGA32): 5 pași
ROBOCAR CONTROLAT DE LA DISTANȚĂ INFRA RED CU UTILIZARE MCU AVR (ATMEGA32): 5 pași

Video: ROBOCAR CONTROLAT DE LA DISTANȚĂ INFRA RED CU UTILIZARE MCU AVR (ATMEGA32): 5 pași

Video: ROBOCAR CONTROLAT DE LA DISTANȚĂ INFRA RED CU UTILIZARE MCU AVR (ATMEGA32): 5 pași
Video: Arduino - robotul condus cu ajutorul unei telecomenzi 2024, Noiembrie
Anonim
ROBOCAR CONTROLAT DE LA DISTANȚĂ INFRA ROȘU CU UTILIZATORUL MCU AVR (ATMEGA32)
ROBOCAR CONTROLAT DE LA DISTANȚĂ INFRA ROȘU CU UTILIZATORUL MCU AVR (ATMEGA32)

Prezentul PROIECT descrie o proiectare și implementare a unui RoboCar controlat de la distanță în infraroșu (IR) care poate fi utilizat pentru diferite aplicații de control automat fără pilot. Am proiectat RoboCar controlat de la distanță (mișcare stânga-dreapta / față-spate). Întregul sistem se bazează pe microcontroler (Atmega32) care face sistemul de control mai inteligent și ușor de modificat pentru alte aplicații. Acesta permite utilizatorului să acționeze sau să controleze un RoboCar și să acționeze comutatorul de alimentare de la aproximativ 5 metri distanță.

Cuvinte cheie: Decodor IR, microcontroler AVR (Atmega32), telecomandă TV, comunicație fără fir

_

Pasul 1: Comunicare intra-roșie

Comunicare intraRed
Comunicare intraRed

Principiul comunicării IR:

a) Transmisie IR

Transmițătorul unui LED IR în circuitul său, care emite lumină infraroșie pentru fiecare impuls electric dat. Acest impuls este generat pe măsură ce un buton de pe telecomandă este apăsat, completând astfel circuitul, oferind polarizare LED-ului. LED-ul care este polarizat emite lumină cu lungimea de undă de 940nm ca o serie de impulsuri, corespunzătoare butonului apăsat. Cu toate acestea, deoarece, împreună cu LED-ul IR, multe alte surse de lumină infraroșie, cum ar fi ființele umane, becurile, soarele etc., informațiile transmise pot fi interferate. O soluție la această problemă este prin modulare. Semnalul transmis este modulat folosind o frecvență purtătoare de 38 KHz (sau orice altă frecvență între 36 și 46 KHz). LED-ul IR este făcut să oscileze la această frecvență pe durata impulsului. Informațiile sau semnalele luminoase sunt modulate pe lățimea pulsului și sunt conținute în frecvența de 38 KHz. Transmisia în infraroșu se referă la energia din regiunea spectrului de radiații electromagnetice la lungimi de undă mai mari decât cele ale luminii vizibile, dar mai scurte decât cele ale undelor radio. În mod corespunzător, frecvențele în infraroșu sunt mai mari decât cele ale microundelor, dar mai mici decât cele ale luminii vizibile. Oamenii de știință împart spectrul de radiații infraroșii (IR) în trei regiuni. Lungimile de undă sunt specificate în microni (simbolizat µ, unde 1 µ = 10-6 metri) sau în nanometri (prescurtat nm, unde 1 nm = 10-9 metri = 0,001 5). Banda IR apropiată conține energie în intervalul de lungimi de undă cel mai apropiat de vizibil, de la aproximativ 0,750 până la 1,300 5 (750 până la 1300 nm). Banda IR intermediară (numită și banda IR medie) este formată din energie cuprinsă între 1.300 și 3.000 5 (1300 până la 3000 nm). Banda IR îndepărtată se extinde de la 2.000 la 14.000 5 (3000 nm la 1.4000 x 104nm).

b) Recepție IR

Receptorul constă dintr-un detector foto care dezvoltă un semnal electric de ieșire pe măsură ce lumina este incidentă pe el. Ieșirea detectorului este filtrată folosind un filtru cu bandă îngustă care elimină toate frecvențele sub sau peste frecvența purtătoare (38 KHz în acest caz). Ieșirea filtrată este apoi dată dispozitivului adecvat, cum ar fi un microcontroler sau un microprocesor care controlează dispozitive precum un PC sau un robot. Ieșirea din filtre poate fi, de asemenea, conectată la osciloscop pentru a citi impulsurile.

Aplicații ale IR:

Infraroșul este utilizat într-o varietate de aplicații de comunicații, monitorizare și control fără fir. Aici sunt cateva exemple:

· Cutii de telecomandă pentru divertisment la domiciliu

· Wireless (rețele locale)

· Legături între computerele notebook și computerele desktop

· Modem fără fir

· Detectoare de intruziune

· Detectoare de mișcare

· Senzori de incendiu

· Sisteme de viziune nocturnă

· Echipamente de diagnostic medical

· Sisteme de ghidare a rachetelor

· Dispozitive de monitorizare geologică

Transmiterea datelor IR de la un dispozitiv la altul este uneori denumită radiație.

Pasul 2: senzor IR și protocol NEC Fromat

Senzor IR și protocol NEC Fromat
Senzor IR și protocol NEC Fromat
Senzor IR și protocol NEC Fromat
Senzor IR și protocol NEC Fromat
Senzor IR și protocol NEC Fromat
Senzor IR și protocol NEC Fromat
Senzor IR și protocol NEC Fromat
Senzor IR și protocol NEC Fromat

Senzori IR (Fig1)

TSOP1738, SFH-5110-38 (38kHz)

Caracteristici senzori TSOP:

  • Preamplificatorul și detectorul foto sunt ambele într-un singur pachet
  • Filtru intern pentru frecvența PCM
  • Protecție îmbunătățită împotriva perturbării câmpului electric
  • Compatibilitate TTL și CMOS
  • Ieșire activă scăzută Consum redus de energie
  • Imunitate ridicată împotriva luminii ambientale
  • Este posibilă transmiterea continuă a datelor

Protocolul NEC:

Protocolul de transmisie IR NEC utilizează codificarea la distanță de impuls a biților de mesaj. Fiecare explozie de impuls are o lungime de 562,5µs, la o frecvență purtătoare de 38kHz (26,3µs). Biții logici sunt transmiși după cum urmează (Fig2):

  • „0” logic - o explozie de impuls de 562,5µs urmată de un spațiu de 562,5µs, cu un timp total de transmisie de 1,125ms
  • „1” logic - o explozie de impuls de 562,5µs urmată de un spațiu de 1,6875 ms, cu un timp total de transmisie de 2,25 ms

Pulsul purtător constă din 21 de cicluri la 38 kHz. Impulsurile au de obicei un raport marca / spațiu de 1: 4, pentru a reduce consumul curent:

(Fig3)

Fiecare secvență de cod începe cu un impuls de 9 ms, cunoscut sub numele de impuls AGC. Urmează o tăcere de 4,5 ms:

(Fig4)

Datele sunt apoi formate din 32 de biți, o adresă de 16 biți urmată de o comandă de 16 biți, afișată în ordinea în care sunt transmise (de la stânga la dreapta):

(Fig5)

Cei patru octeți de biți de date primesc fiecare bit cel mai puțin semnificativ. Figura 1 ilustrează formatul unui cadru de transmisie IR NEC, pentru o adresă de 00h (00000000b) și o comandă de ADh (10101101b).

Pentru a transmite un cadru de mesaj este necesar un total de 67,5 ms. Are nevoie de 27 ms pentru a transmite cei 16 biți de adresă (adresă + invers) și cei 16 biți de comandă (comandă + invers).

(Fig6)

Timpul necesar pentru transmiterea cadrului:

16 biți pentru adresă (adresă + invers) necesită 27 ms pentru a transmite timpul. Iar cei 16 biți pentru comandă (comandă + invers) necesită, de asemenea, 27 ms pentru a transmite timpul. deoarece (adresă + adresă inversă) sau (comandă + comandă inversă) va conține întotdeauna 8 '0 și 8' 1 deci (8 * 1.125ms) + (8 * 2.25ms) == 27 ms. în funcție de acest timp total necesar pentru transmiterea cadrului este (9ms + 4,5ms + 27ms + 27ms) = 67,5 ms.

REPETĂ CODURI: Dacă tasta de pe telecomandă este menținută apăsată, va fi emis un cod de repetare, de obicei la aproximativ 40 ms după explozia de impuls care a semnificat sfârșitul mesajului. Un cod de repetare va fi trimis în continuare la intervale de 108 ms, până când cheia este eliberată definitiv. Codul de repetare constă din următoarele, în ordine:

  • o explozie de impuls de 9ms
  • un spațiu de 2,25 ms
  • un impuls de 562,5µs a explodat pentru a marca sfârșitul spațiului (și, prin urmare, sfârșitul codului de repetare transmis).

(Fig7)

Calcul întârziere (1 ms):

Frecvența ceasului = 11,0592 Mhz

Ciclul mașinii = 12

Întârziere = 1 ms

TimerValue = 65536 - ((Întârziere * Frecvență ceas) / Ciclul mașinii) = 65536 - ((1ms * 11.0592Mhz) / 12)

= 65536 - 921 = 0xFC67

Pasul 3: Control motor DC utilizând L293D

Control motor DC folosind L293D
Control motor DC folosind L293D

Motor DC

Un motor DC convertește energia electrică în energie mecanică care poate fi utilizată pentru a face multe lucrări utile. Poate produce mișcări mecanice precum Go Forward / Backword al meu RoboCar. Motoarele de curent continuu sunt disponibile în diferite calificări, cum ar fi 6V și 12V. Are două fire sau pini. Putem inversa sensul de rotație inversând polaritatea de intrare.

Aici preferăm L293D, deoarece un rating de 600mA este bun pentru conducerea motoarelor de curent continuu mici, iar diodele de protecție sunt incluse în IC-ul în sine. Descrierea fiecărui pin este după cum urmează: Activați pinii: aceștia sunt pinii nr. 1 și pinul nr. 9. Pinul nr. 1 este utilizat pentru a activa driverul Half-H 1 și 2. (H bridge pe partea stângă). Pinul nr. 9 este utilizat pentru a activa driverul H-bridge 3 și 4. (H bridge pe partea dreaptă).

Conceptul este simplu, dacă doriți să utilizați un anumit pod H, trebuie să dați o logică ridicată pinilor de activare corespunzători împreună cu sursa de alimentare a IC. Acest pin poate fi, de asemenea, utilizat pentru a controla viteza motorului folosind tehnica PWM. VCC1 (Pin 16): Pin de alimentare. Conectați-l la sursa de 5V. VCC2 (Pin 8): sursă de alimentare pentru motor. Aplicați tensiune + ve conform valorii motorului. Dacă doriți să conduceți motorul la 12V, aplicați 12V pe acest pin.

De asemenea, este posibil să acționați motorul direct pe o baterie, alta decât cea utilizată pentru alimentarea cu energie a circuitului, conectați doar terminalul + ve al acelei baterii la pinul VCC2 și faceți GND ambele baterii comune. (Tensiunea MAX la acest pin este de 36V conform fișei sale tehnice). GND (Pinii 4, 5, 12, 13): Conectați-i la GND comun al circuitului.

Acestea sunt pini de intrare prin care semnalele de control sunt date de microcontrolere sau alte circuite / circuite integrate. De exemplu, dacă pe pinul 2 (intrarea primei jumătăți H driver) dăm Logic 1 (5V), vom obține o tensiune egală cu VCC2 pe pinul de ieșire corespunzător din prima jumătate H driver, adică pinul nr. 3. În mod similar pentru Logic 0 (0V) pe Pin 2, apare 0V pe Pin 3. Ieșiri (Pin 3, 6, 11, 14): Ieșiri pin. Conform semnalului de intrare, semnalul de ieșire vine.

Mișcări motorii A B

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

…………… Opriți: Scăzut: Scăzut

…… în sensul acelor de ceasornic: scăzut: ridicat

În sens invers acelor de ceasornic: Înalt: Scăzut

……………. Oprire: mare: mare

Pasul 4: Diagrame de circuit pentru driverul motorului și senzorul IR

Diagrame de circuit pentru driverul motorului și senzorul IR
Diagrame de circuit pentru driverul motorului și senzorul IR
Diagrame de circuit pentru driverul motorului și senzorul IR
Diagrame de circuit pentru driverul motorului și senzorul IR
Diagrame de circuit pentru driverul motorului și senzorul IR
Diagrame de circuit pentru driverul motorului și senzorul IR

ATmega32 este un microcontroler CMOS de 8 biți de mică putere bazat pe arhitectura RIS îmbunătățită AVR. Executând instrucțiuni puternice într-un singur ciclu de ceas, ATmega32 realizează randamente care se apropie de 1 MIPS pe MHz permițând proiectantului sistemului să optimizeze consumul de energie față de viteza de procesare.

Miezul AVR combină un set de instrucțiuni bogat cu 32 de registre de lucru de uz general. Toate cele 32 de registre sunt conectate direct la Unitatea Logică Aritmetică (ALU), permițând accesarea a două registre independente într-o singură instrucțiune executată într-un ciclu de ceas. Arhitectura rezultată este mai eficientă în cod, obținând în același timp randamente de până la zece ori mai rapide decât microcontrolerele convenționale CISC.

ATmega32 oferă următoarele caracteristici:

  • 32 Kbyte de memorie Flash programabilă în sistem, cu funcții de citire-scriere,
  • 1024 octeți EEPROM, 2K octeți SRAM,
  • 32 linii I / O de uz general,
  • 32 registre de lucru de uz general,
  • o interfață JTAG pentru Boundaryscan,
  • Suport și programare pentru depanare pe cip, trei temporizatoare / contoare flexibile cu moduri de comparare, întreruperi interne și externe, un USART programabil în serie, o interfață serială cu două fire orientată pe octeți, un canal 8,
  • ADC pe 10 biți cu etapă de intrare diferențială opțională cu câștig programabil (numai pachetul TQFP),
  • un cronometru programabil Watchdog cu oscilator intern,
  • un port serial SPI și
  • șase moduri de economisire a energiei selectabile de software.

    • Modul Repaus oprește CPU în timp ce permite USART,
    • Interfață cu două fire, convertor A / D,
    • SRAM,
    • Temporizator / Contoare,
    • Portul SPI și
    • întrerupe sistemul pentru a continua să funcționeze.
    • Modul Power-down salvează conținutul registrului, dar blochează oscilatorul, dezactivând toate celelalte funcții ale cipului până la următoarea întrerupere externă sau resetare hardware.
    • În modul de economisire a energiei, cronometrul asincron continuă să ruleze, permițând utilizatorului să mențină o bază de cronometru în timp ce restul dispozitivului doarme.
    • Modul de reducere a zgomotului ADC oprește procesorul și toate modulele I / O, cu excepția temporizatorului asincron și ADC, pentru a minimiza zgomotul de comutare în timpul conversiilor ADC
    • În modul de așteptare, oscilatorul cu cristal / rezonator funcționează în timp ce restul dispozitivului doarme. Acest lucru permite pornirea foarte rapidă combinată cu un consum redus de energie.
    • În modul Extended Standby, atât oscilatorul principal, cât și temporizatorul asincron continuă să ruleze.

Toate circuitele conexe sunt prezentate aici și este dat și circuitul principal (atmega32).

Pasul 5: Programe Avr

Programe Avr
Programe Avr
Programe Avr
Programe Avr

1. Pentru „senzor la distanță”:

#include #include

#include „remote.h”

// Globale volatile nesemnate int Time; // Temporizator principal, stochează timpul în 10us, // Actualizat de ISR (TIMER0_COMP) volatile nesemnate Char BitNo; // Poziția următoarei caractere volatile nesemnate BIT ByteNo; // Poziția octetului curent

caracter volatil nesemnat IrData [4]; // Cele patru octeți de date ale pachetului Ir // Adresă de 2 octeți Date de 2 octeți caracter volatile nesemnate IrCmdQ [QMAX]; // Comandă finală primită (tampon)

volatile nesemnate char PrevCmd; // Folosit pentru repetare

// Variabile utilizate pentru a începe repetarea numai după ce o tastă este apăsată pentru o anumită perioadă de timp

caracter volatil nesemnat Repetați; // 1 = da 0 = nu caracter volatil nesemnat RCount; // Repetați numărul

caracter volatil QFront = -1, QEnd = -1;

stat volatil nesemnat; // Starea destinatarului

volatile nesemnate Char Edge; // Marginea întreruperii [RISING = 1 OR FALLING = 0]

volatil nesemnat int stop;

/ ************************************************** ********************************************* / / * FUNCTIONSSTARTS * / / ************************************************* ********************************************** /

void RemoteInit () {

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

stop = 0; State = IR_VALIDATE_LEAD_HIGH; Edge = 0; Repetați = 0;

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

TIMSK | = (1 <

OCR0 = TIMER_COMP_VAL; // Setați valoarea de comparare

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

if (așteptați) în timp ce (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; altfel QFront ++; }

retur cmd;

}

2. main ():

int main (nul) {

uint8_t cmd = 0; DDRB = 0x08;

DDRD = 0x80;

DDRC = 0x0f; PORTC = 0x00;

while (1) // Buclă infinită la senzorul IR activ {

cmd = GetRemoteCmd (1);

comutator (cmd) {

caz xx: {// BOT Se deplasează înainte // Ch + btn forwardmotor ();

pauză; // Ambele motoare în direcția înainte

}

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

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

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

implicit: PORTC = 0x00; break; // Ambele motoare stânga și dreapta se opresc}

}

} / * Sfârșitul principalului * /

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

// Este un model de bază, dar îl pot folosi în modul PWM.

//…………………………………………….. A se distra……………………………………………………//

Recomandat: