Sommario:

ROBOCAR TELECOMANDATO A INFRAROSSI UTILIZZANDO AVR (ATMEGA32) MCU: 5 passaggi
ROBOCAR TELECOMANDATO A INFRAROSSI UTILIZZANDO AVR (ATMEGA32) MCU: 5 passaggi

Video: ROBOCAR TELECOMANDATO A INFRAROSSI UTILIZZANDO AVR (ATMEGA32) MCU: 5 passaggi

Video: ROBOCAR TELECOMANDATO A INFRAROSSI UTILIZZANDO AVR (ATMEGA32) MCU: 5 passaggi
Video: Link a Infrarossi (IR) con Arduino - Il trasmettitore - Video 252 2024, Dicembre
Anonim
ROBOCAR TELECOMANDATO A INFRAROSSI CON AVR (ATMEGA32) MCU
ROBOCAR TELECOMANDATO A INFRAROSSI CON AVR (ATMEGA32) MCU

Il presente PROGETTO descrive la progettazione e l'implementazione di un RoboCar telecomandato a infrarossi (IR) che può essere utilizzato per varie applicazioni di controllo automatizzato senza pilota. Ho progettato RoboCar telecomandato (movimento sinistra-destra/anteriore-posteriore). L'intero sistema è basato su microcontrollore (Atmega32) che rende il sistema di controllo più intelligente e facile da modificare per altre applicazioni. Consente all'utente di azionare o controllare un RoboCar e di azionare l'interruttore di alimentazione da una distanza di circa 5 metri.

Parole chiave: decodificatore IR, microcontrollore AVR (Atmega32), telecomando TV, comunicazione wireless

_

Passaggio 1: Comunicazione IntraRed

Comunicazione IntraRed
Comunicazione IntraRed

Principio di comunicazione IR:

a) Trasmissione IR

Il trasmettitore di un LED IR all'interno del suo circuito, che emette luce infrarossa per ogni impulso elettrico che gli viene dato. Questo impulso viene generato quando viene premuto un pulsante sul telecomando, completando così il circuito, fornendo polarizzazione al LED. Il LED essendo polarizzato emette luce della lunghezza d'onda di 940nm come una serie di impulsi, corrispondenti al pulsante premuto. Tuttavia, poiché insieme al LED IR molte altre fonti di luce infrarossa come noi esseri umani, lampadine, sole, ecc., Le informazioni trasmesse possono essere disturbate. Una soluzione a questo problema è la modulazione. Il segnale trasmesso viene modulato utilizzando una frequenza portante di 38 KHz (o qualsiasi altra frequenza compresa tra 36 e 46 KHz). Il LED IR viene fatto oscillare a questa frequenza per la durata dell'impulso. Le informazioni oi segnali luminosi sono modulati ad ampiezza d'impulso e sono contenuti nella frequenza di 38 KHz. La trasmissione a infrarossi si riferisce all'energia nella regione dello spettro delle radiazioni elettromagnetiche a lunghezze d'onda più lunghe di quelle della luce visibile, ma più corte di quelle delle onde radio. Corrispondentemente, le frequenze infrarosse sono superiori a quelle delle microonde, ma inferiori a quelle della luce visibile. Gli scienziati dividono lo spettro della radiazione infrarossa (IR) in tre regioni. Le lunghezze d'onda sono specificate in micron (simboleggiati µ, dove 1 µ = 10-6 metri) o in nanometri (abbreviati nm, dove 1 nm = 10-9 metri = 0,001 5). La banda IR vicina contiene energia nella gamma di lunghezze d'onda più vicine al visibile, da circa 0,750 a 1,300 5 (da 750 a 1300 nm). La banda IR intermedia (chiamata anche banda IR media) è costituita da energia nell'intervallo da 1.300 a 3.000 5 (da 1300 a 3000 nm). La banda IR lontana si estende da 2.000 a 14.000 5 (da 3000 nm a 1.4000 x 104 nm).

b) Ricezione IR

Il ricevitore è costituito da un fotorilevatore che sviluppa un segnale elettrico in uscita quando la luce lo colpisce. L'uscita del rivelatore viene filtrata utilizzando un filtro a banda stretta che scarta tutte le frequenze al di sotto o al di sopra della frequenza portante (38 KHz in questo caso). L'uscita filtrata viene poi data al dispositivo adatto come un Microcontrollore o un Microprocessore che controlla dispositivi come un PC o un Robot. L'uscita dei filtri può essere collegata anche all'oscilloscopio per leggere gli impulsi.

Applicazioni dell'IR:

Gli infrarossi vengono utilizzati in una varietà di comunicazioni wireless, monitoraggio e applicazioni di controllo. Ecco alcuni esempi:

· Scatole telecomandate per home entertainment

· Wireless (reti locali)

· Collegamenti tra computer notebook e computer desktop

· Modem senza fili

· Rilevatori di intrusione

· Rilevatori di movimento

· Sensori antincendio

· Sistemi di visione notturna

· Apparecchiature medico-diagnostiche

· Sistemi di guida missilistica

· Dispositivi di monitoraggio geologico

La trasmissione di dati IR da un dispositivo a un altro viene talvolta definita trasmissione a raggi.

Passaggio 2: sensore IR e protocollo NEC Fromat

Sensore IR e protocollo NEC Fromat
Sensore IR e protocollo NEC Fromat
Sensore IR e protocollo NEC Fromat
Sensore IR e protocollo NEC Fromat
Sensore IR e protocollo NEC Fromat
Sensore IR e protocollo NEC Fromat
Sensore IR e protocollo NEC Fromat
Sensore IR e protocollo NEC Fromat

Sensori IR (Fig1)

TSOP1738, SFH-5110-38 (38kHz)

Sensori TSOP Caratteristiche:

  • Il preamplificatore e il fotorilevatore sono entrambi in confezione singola
  • Filtro interno per frequenza PCM
  • Schermatura migliorata contro i disturbi del campo elettrico
  • Compatibilità TTL e CMOS
  • Uscita attiva basso Basso consumo energetico
  • Elevata immunità alla luce ambientale
  • Possibilità di trasmissione dati continua

Protocollo NEC:

Il protocollo di trasmissione NEC IR utilizza la codifica della distanza degli impulsi dei bit del messaggio. Ogni burst di impulsi ha una lunghezza di 562,5 µs, a una frequenza portante di 38 kHz (26,3 µs). I bit logici vengono trasmessi come segue (Fig2):

  • '0' logico: un burst di impulsi di 562,5 µs seguito da uno spazio di 562,5 µs, con un tempo di trasmissione totale di 1,125 ms
  • Logico '1': un burst di impulsi di 562,5 µs seguito da uno spazio di 1,6875 ms, con un tempo di trasmissione totale di 2,25 ms

L'impulso portante consiste di 21 cicli a 38kHz. Gli impulsi hanno solitamente un rapporto segno/spazio di 1:4, per ridurre il consumo di corrente:

(Fig3)

Ogni sequenza di codice inizia con un impulso di 9 ms, noto come impulso AGC. Questo è seguito da un silenzio di 4.5ms:

(Fig4)

I dati sono quindi costituiti da 32 bit, un indirizzo a 16 bit seguito da un comando a 16 bit, mostrato nell'ordine in cui vengono trasmessi (da sinistra a destra):

(Fig5)

I quattro byte di bit di dati vengono inviati ciascuno per primo il bit meno significativo. La Figura 1 illustra il formato di un frame di trasmissione IR NEC, per un indirizzo di 00h(00000000b) e un comando di ADh (10101101b).

Per trasmettere un telegramma sono necessari un totale di 67,5 ms. Occorrono 27ms per trasmettere i 16 bit di indirizzo (indirizzo + inverso) ei 16 bit di comando (comando + inverso).

(figura6)

Tempo necessario per trasmettere il frame:

16 bit per l'indirizzo (indirizzo + inverso) richiedono 27 ms per trasmettere l'ora e anche i 16 bit per il comando (comando + inversa) richiedono 27 ms per trasmettere l'ora. perché (indirizzo + indirizzo inverso) o (comando+comando inverso) conterrà sempre 8 '0' e 8 '1 così (8 * 1.125ms) + (8 * 2.25ms) == 27 ms. secondo questo tempo totale necessario per trasmettere il frame è (9ms +4.5ms +27ms+27ms) = 67.5 ms.

CODICI DI RIPETIZIONE: Se si tiene premuto il tasto sul telecomando, verrà emesso un codice di ripetizione, in genere circa 40 ms dopo il burst di impulsi che ha significato la fine del messaggio. Un codice di ripetizione continuerà ad essere inviato a intervalli di 108 ms, fino al rilascio definitivo della chiave. Il codice di ripetizione è composto da quanto segue, nell'ordine:

  • un burst di impulsi in anticipo di 9 ms
  • uno spazio di 2,25 ms
  • un burst di impulsi di 562,5µs per contrassegnare la fine dello spazio (e quindi la fine del codice di ripetizione trasmesso).

(fig7)

Calcolo del ritardo (1 ms):

Frequenza orologio=11.0592 Mhz

Ciclo macchina = 12

Ritardo=1ms

TimerValue= 65536 - ((Delay * ClockFreq)/Ciclo macchina)=65536-((1ms * 11.0592Mhz)/12)

= 65536 - 921= 0xFC67

Passaggio 3: controllo del motore CC utilizzando L293D

Controllo motore CC utilizzando L293D
Controllo motore CC utilizzando L293D

Motore a corrente continua

Un motore a corrente continua converte l'energia elettrica in energia meccanica che può essere utilizzata per svolgere molti lavori utili. Può produrre movimenti meccanici come Go Forward/Backword del mio RoboCar. I motori DC sono disponibili in varie valutazioni come 6V e 12V. Ha due fili o pin. Possiamo invertire il senso di rotazione invertendo la polarità dell'input.

Qui preferiamo L293D poiché una valutazione di 600 mA è buona per pilotare piccoli motori CC e i diodi di protezione sono inclusi nell'IC stesso. La descrizione di ciascun pin è la seguente: Pin di abilitazione: sono i pin n. 1 e pin n. 9. Perno n. 1 è utilizzato per abilitare il driver Half-H 1 e 2. (H bridge sul lato sinistro). Pin n. 9 viene utilizzato per abilitare il driver 3 e 4 del ponte H (ponte H sul lato destro).

Il concetto è semplice, se vuoi usare un particolare ponte H devi dare una logica alta ai corrispondenti pin di abilitazione insieme all'alimentazione dell'IC. Questo pin può essere utilizzato anche per controllare la velocità del motore utilizzando la tecnica PWM. VCC1 (Pin 16): Pin di alimentazione. Collegalo all'alimentazione 5V. VCC2 (Pin 8): Alimentazione per motore. Applicare +ve tensione ad esso secondo la potenza nominale del motore. Se vuoi guidare il tuo motore a 12V, applica 12V su questo pin.

E' anche possibile pilotare il motore direttamente su una batteria, diversa da quella utilizzata per alimentare il circuito, basta collegare il terminale +ve di quella batteria al pin VCC2 e rendere comune il GND di entrambe le batterie. (La tensione MAX su questo pin è 36 V come da scheda tecnica). GND (pin 4, 5, 12, 13): collegarli al comune GND del circuito. Ingressi (pin 2, 7, 10, 15):

Questi sono pin di ingresso attraverso i quali i segnali di controllo vengono forniti da microcontrollori o altri circuiti/IC. Ad esempio, se sul pin 2 (Input del driver 1st half H) diamo Logic 1 (5V), otterremo una tensione pari a VCC2 sul pin di output corrispondente del driver 1st half H cioè il pin n. 3. Analogamente per Logic 0 (0V) sul Pin 2, appare 0V sul Pin 3. Uscite (Pin 3, 6, 11, 14): Pin di uscita. In base al segnale di ingresso arriva il segnale di uscita.

Movimenti motori A B

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

……………Stop: Basso: Basso

……In senso orario: Basso: Alto

Antiorario: Alto: Basso

……………. Stop: Alto: Alto

Passaggio 4: schemi circuitali per driver motore e sensore IR

Schemi circuitali per driver motore e sensore IR
Schemi circuitali per driver motore e sensore IR
Schemi circuitali per driver motore e sensore IR
Schemi circuitali per driver motore e sensore IR
Schemi circuitali per driver motore e sensore IR
Schemi circuitali per driver motore e sensore IR

L'ATmega32 è un microcontrollore CMOS a 8 bit a bassa potenza basato sull'architettura RISC avanzata dell'AVR. Eseguendo potenti istruzioni in un singolo ciclo di clock, l'ATmega32 raggiunge throughput che si avvicinano a 1 MIPS per MHz, consentendo al progettista del sistema di ottimizzare il consumo energetico rispetto alla velocità di elaborazione.

Il core dell'AVR combina un ricco set di istruzioni con 32 registri di lavoro generici. Tutti i 32 registri sono collegati direttamente all'Arithmetic Logic Unit (ALU), consentendo l'accesso a due registri indipendenti in un'unica istruzione eseguita in un ciclo di clock. L'architettura risultante è più efficiente dal punto di vista del codice e raggiunge velocità fino a dieci volte più veloci rispetto ai microcontrollori CISC convenzionali.

L'ATmega32 offre le seguenti caratteristiche:

  • 32 Kbyte di memoria di programma Flash programmabile nel sistema con capacità di lettura e scrittura,
  • EEPROM da 1024 byte, SRAM da 2K byte,
  • 32 linee di I/O per uso generale,
  • 32 registri di lavoro generici,
  • un'interfaccia JTAG per Boundaryscan,
  • Supporto e programmazione per debug su chip, tre timer/contatori flessibili con modalità di confronto, interrupt interni ed esterni, un USART seriale programmabile, un'interfaccia seriale a due fili orientata ai byte, un'interfaccia seriale a 8 canali,
  • ADC a 10 bit con stadio di ingresso differenziale opzionale con guadagno programmabile (solo pacchetto TQFP),
  • un Watchdog Timer programmabile con oscillatore interno,
  • una porta seriale SPI, e
  • sei modalità di risparmio energetico selezionabili dal software.

    • La modalità Idle arresta la CPU consentendo l'USART,
    • Interfaccia a due fili, convertitore A/D,
    • SRAM,
    • Timer/Contatori,
    • Porta SPI e
    • interrompere il sistema per continuare a funzionare.
    • La modalità Power-down salva il contenuto del registro ma blocca l'oscillatore, disabilitando tutte le altre funzioni del chip fino al successivo interrupt esterno o ripristino hardware.
    • In modalità di risparmio energetico, il timer asincrono continua a funzionare, consentendo all'utente di mantenere una base del timer mentre il resto del dispositivo è inattivo.
    • La modalità di riduzione del rumore dell'ADC arresta la CPU e tutti i moduli I/O tranne il timer asincrono e l'ADC, per ridurre al minimo il rumore di commutazione durante le conversioni dell'ADC
    • In modalità Standby, l'oscillatore al cristallo/risonatore è in funzione mentre il resto del dispositivo è inattivo. Ciò consente un avviamento molto veloce combinato con un basso consumo energetico.
    • In modalità Extended Standby, sia l'oscillatore principale che il timer asincrono continuano a funzionare.

Tutti i circuiti correlati sono forniti qui e viene fornito anche il circuito principale (atmega32).

Passaggio 5: programmi Avr

Programmi Avr
Programmi Avr
Programmi Avr
Programmi Avr

1. Per "sensore remoto":

#include #include

#include "remoto.h"

//Globals volatile unsigned int Time; //Timer principale, memorizza il tempo in 10us, //Aggiornato da ISR(TIMER0_COMP) volatile unsigned char BitNo; //Pos del prossimo BIT volatile unsigned char ByteNo; //Pos del Byte corrente

carattere volatile senza segno IrData[4]; //I quattro byte di dati del pacchetto Ir //2-Byte Address 2-Byte Data volatile unsigned char IrCmdQ[QMAX];//Final Command Received (Buffer)

carattere volatile senza segno PrevCmd; //Usato per ripetere

//Variabili usate per iniziare a ripetere solo dopo che un tasto è stato premuto per un certo tempo

carattere volatile senza segno Ripeti; //1=yes 0=no volatile unsigned char RCount; //Ripeti conteggio

carattere volatile QFront=-1, QEnd=-1;

volatile unsigned char Stato; //Stato del destinatario

carattere volatile senza segno Edge; //Fronte dell'interrupt [RISING=1 OR FALLING=0]

volatile unsigned int stop;

/************************************************** *********************************************/ /* FUNZIONI INIZIA * / /************************************************** *********************************************/

void RemoteInit() {

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

arresto=0; Stato=IR_VALIDATE_LEAD_HIGH; Bordo=0; Ripeti=0;

//Imposta timer1 //------------ TCCR0|=((1<

TIMSK|=(1<

OCR0=TIMER_COMP_VAL; //Imposta valore di confronto

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

if(attesa) 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; altro QFront++; }

restituire cmd;

}

2. principale():

int main(void){

uint8_t cmd=0; DDRB=0x08;

DDRD=0x80;

DDRC=0x0f; PORTC=0x00;

while (1) //Ciclo infinito al sensore IR attivo {

cmd=GetRemoteCmd(1);

interruttore (cmd) {

case xx: { //BOT Si sposta in avanti //Ch+ btn forwardmotor();

rottura; // Entrambi i motori in avanti

}

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

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

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

default: PORTC=0x00;break; // Entrambi i motori sinistro e destro si fermano }

}

}/*Fine principale*/

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

// È un modello base, ma posso usarlo in modalità PWM.

//…………………………………………….. Divertiti……………………………………………………//

Consigliato: