Índice:

ROBOCAR DE CONTROLE REMOTO INFRA RED USANDO AVR (ATMEGA32) MCU: 5 etapas
ROBOCAR DE CONTROLE REMOTO INFRA RED USANDO AVR (ATMEGA32) MCU: 5 etapas

Vídeo: ROBOCAR DE CONTROLE REMOTO INFRA RED USANDO AVR (ATMEGA32) MCU: 5 etapas

Vídeo: ROBOCAR DE CONTROLE REMOTO INFRA RED USANDO AVR (ATMEGA32) MCU: 5 etapas
Vídeo: Arduino Missile Defense Radar System in ACTION 2024, Julho
Anonim
ROBOCAR DE CONTROLE REMOTO INFRA RED USANDO AVR (ATMEGA32) MCU
ROBOCAR DE CONTROLE REMOTO INFRA RED USANDO AVR (ATMEGA32) MCU

O presente PROJETO descreve um projeto e implementação de um RoboCar controlado remotamente por infravermelho (IR) que pode ser usado para várias aplicações de controle automatizado não tripulado. Eu projetei o RoboCar com controle remoto (movimento esquerda-direita / frente-trás). Todo o sistema é baseado em microcontrolador (Atmega32) que torna o sistema de controle mais inteligente e fácil de modificar para outras aplicações. Ele permite que o usuário opere ou controle um RoboCar e opere o interruptor de alimentação a cerca de 5 metros de distância.

Palavras-chave: Decodificador IR, Microcontrolador AVR (Atmega32), Controlador remoto de TV, Comunicação sem fio

_

Etapa 1: comunicação intra-vermelha

Comunicação IntraRed
Comunicação IntraRed

Princípio de comunicação IR:

a) Transmissão IR

O transmissor de um LED IR dentro de seu circuito, que emite luz infravermelha para cada pulso elétrico que recebe. Este pulso é gerado quando um botão no controle remoto é pressionado, completando assim o circuito, fornecendo polarização ao LED. O LED ao ser polarizado emite luz no comprimento de onda de 940nm como uma série de pulsos, correspondendo ao botão pressionado. No entanto, uma vez que junto com o LED IR muitas outras fontes de luz infravermelha, como nós, seres humanos, lâmpadas, sol, etc, a informação transmitida pode ser interferida. Uma solução para este problema é por modulação. O sinal transmitido é modulado usando uma frequência portadora de 38 KHz (ou qualquer outra frequência entre 36 a 46 KHz). O LED IV é feito para oscilar nesta frequência durante o tempo de duração do pulso. As informações ou os sinais de luz são modulados por largura de pulso e estão contidos na frequência de 38 KHz. A transmissão infravermelha se refere à energia na região do espectro de radiação eletromagnética em comprimentos de onda mais longos do que os da luz visível, mas mais curtos do que os das ondas de rádio. Correspondentemente, as frequências infravermelhas são mais altas do que as das microondas, mas mais baixas do que as da luz visível. Os cientistas dividem o espectro da radiação infravermelha (IV) em três regiões. Os comprimentos de onda são especificados em mícrons (simbolizado µ, onde 1 µ = 10-6 metros) ou em nanômetros (abreviado nm, onde 1 nm = 10-9 metros = 0,001 5). A banda de infravermelho próximo contém energia na faixa de comprimentos de onda mais próximos do visível, de aproximadamente 0,750 a 1,300 5 (750 a 1300 nm). A banda IV intermediária (também chamada de banda IV média) consiste em energia na faixa de 1.300 a 3.000 5 (1300 a 3.000 nm). A banda IR distante se estende de 2.000 a 14.000 5 (3.000 nm a 1.4000 x 104 nm).

b) Recepção IR

O receptor consiste em um fotodetector que desenvolve um sinal elétrico de saída quando a luz incide sobre ele. A saída do detector é filtrada usando um filtro de banda estreita que descarta todas as frequências abaixo ou acima da frequência portadora (38 KHz neste caso). A saída filtrada é então fornecida ao dispositivo adequado como um microcontrolador ou microprocessador que controla dispositivos como um PC ou um robô. A saída dos filtros também pode ser conectada ao Osciloscópio para ler os pulsos.

Aplicações de IR:

O infravermelho é usado em uma variedade de aplicações de controle, monitoramento e comunicação sem fio. aqui estão alguns exemplos:

· Caixas de controle remoto para entretenimento doméstico

· Wireless (redes locais)

· Links entre notebooks e computadores desktop

· Modem sem fio

· Detectores de intrusão

· Detectores de movimento

· Sensores de incêndio

· Sistemas de visão noturna

· Equipamentos de diagnóstico médico

· Sistemas de orientação de mísseis

· Dispositivos de monitoramento geológico

A transmissão de dados de infravermelho de um dispositivo para outro às vezes é chamada de transmissão.

Etapa 2: Sensor IR e protocolo NEC Fromat

Sensor IR e Protocolo NEC Fromat
Sensor IR e Protocolo NEC Fromat
Sensor IR e Protocolo NEC Fromat
Sensor IR e Protocolo NEC Fromat
Sensor IR e Protocolo NEC Fromat
Sensor IR e Protocolo NEC Fromat
Sensor IR e Protocolo NEC Fromat
Sensor IR e Protocolo NEC Fromat

Sensores IR (Fig1)

TSOP1738, SFH-5110-38 (38 kHz)

Recursos dos sensores TSOP:

  • O pré-amplificador e o fotodetector estão ambos em um único pacote
  • Filtro interno para frequência PCM
  • Proteção aprimorada contra distúrbios de campo elétrico
  • Compatibilidade TTL e CMOS
  • Saída ativa baixa Baixo consumo de energia
  • Alta imunidade contra luz ambiente
  • Possível transmissão contínua de dados

Protocolo NEC:

O protocolo de transmissão NEC IR usa codificação de distância de pulso dos bits de mensagem. Cada burst de pulso tem 562,5 µs de comprimento, a uma frequência portadora de 38 kHz (26,3 µs). Os bits lógicos são transmitidos da seguinte forma (Fig2):

  • '0' lógico - uma rajada de pulso de 562,5 µs seguida por um espaço de 562,5 µs, com um tempo total de transmissão de 1,125 ms
  • '1' lógico - uma rajada de pulso de 562,5 µs seguida por um espaço de 1,6875 ms, com um tempo total de transmissão de 2,25 ms

O pulso da portadora consiste em 21 ciclos a 38kHz. Os pulsos geralmente têm uma relação marca / espaço de 1: 4, para reduzir o consumo de corrente:

(Fig3)

Cada sequência de código começa com um pulso de 9 ms, conhecido como pulso AGC. Isso é seguido por um silêncio de 4,5 ms:

(Fig4)

Os dados consistem então em 32 bits, um endereço de 16 bits seguido por um comando de 16 bits, mostrado na ordem em que são transmitidos (da esquerda para a direita):

(Fig5)

Cada um dos quatro bytes de bits de dados é enviado pelo bit menos significativo primeiro. A Figura 1 ilustra o formato de um quadro de transmissão NEC IR, para um endereço de 00h (00000000b) e um comando de ADh (10101101b).

Um total de 67,5 ms é necessário para transmitir um quadro de mensagem. São necessários 27ms para transmitir os 16 bits de endereço (endereço + inverso) e os 16 bits de comando (comando + inverso).

(Fig6)

Tempo necessário para transmitir o quadro:

16 bits para o endereço (endereço + inverso) requerem 27ms para transmitir o tempo. E os 16 bits para o comando (comando + inverso) também requerem 27ms para transmitir o tempo. porque (endereço + endereço inverso) ou (comando + comando inverso) sempre conterá 8 '0's e 8' 1's, então (8 * 1,125ms) + (8 * 2,25ms) == 27 ms. de acordo com este tempo total necessário para transmitir o quadro é (9ms + 4,5ms + 27ms + 27ms) = 67,5ms.

CÓDIGOS DE REPETIÇÃO: Se a tecla no controle remoto for mantida pressionada, um código de repetição será emitido, normalmente cerca de 40 ms após a explosão de pulso que significou o fim da mensagem. Um código de repetição continuará a ser enviado em intervalos de 108 ms, até que a chave seja finalmente liberada. O código de repetição consiste no seguinte, em ordem:

  • uma explosão de pulso à frente de 9 ms
  • um espaço de 2,25ms
  • uma rajada de pulso de 562,5 µs para marcar o fim do espaço (e, portanto, o fim do código de repetição transmitido).

(Fig7)

Cálculo do atraso (1ms):

Clock Freq = 11,0592 MHz

Ciclo da máquina = 12

Atraso = 1ms

TimerValue = 65536 - ((Atraso * ClockFreq) / Ciclo da Máquina) = 65536 - ((1ms * 11,0592Mhz) / 12)

= 65536 - 921 = 0xFC67

Etapa 3: Controle do motor DC usando L293D

Controle de motor DC usando L293D
Controle de motor DC usando L293D

Motor DC

Um motor DC converte energia elétrica em energia mecânica que pode ser usada para fazer muitas obras úteis. Ele pode produzir movimentos mecânicos como Go Forward / Backword do meu RoboCar. Os motores DC vêm em várias classificações, como 6V e 12V. Possui dois fios ou pinos. Podemos inverter a direção de rotação, invertendo a polaridade de entrada.

Aqui, preferimos L293D, pois uma classificação de 600mA é boa para acionar pequenos motores CC e diodos de proteção estão incluídos no próprio IC. A descrição de cada pino é a seguinte: Pinos de habilitação: são os pinos no. 1 e pin no. 9. Pin no. 1 é usado para habilitar o driver Half-H 1 e 2. (ponte H no lado esquerdo). Pin no. 9 é usado para habilitar o driver de ponte H 3 e 4. (ponte H no lado direito).

O conceito é simples, se você quiser usar uma ponte H em particular, você deve dar uma lógica alta aos pinos de habilitação correspondentes junto com a fonte de alimentação para o IC. Este pino também pode ser usado para controlar a velocidade do motor usando a técnica PWM. VCC1 (Pino 16): Pino da fonte de alimentação. Conecte-o a uma fonte de 5V. VCC2 (pino 8): fonte de alimentação para o motor. Aplique tensão de + ve a ele de acordo com a classificação do motor. Se você deseja acionar seu motor a 12 V, aplique 12 V neste pino.

Também é possível acionar o motor diretamente em uma bateria, diferente da usada para fornecer energia ao circuito. Basta conectar o terminal + ve daquela bateria ao pino VCC2 e fazer o GND de ambas as baterias em comum. (A tensão máxima neste pino é 36 V de acordo com sua folha de dados). GND (Pinos 4, 5, 12, 13): Conecte-os ao GND comum do circuito. Entradas (Pinos 2, 7, 10, 15):

Estes são pinos de entrada através dos quais os sinais de controle são fornecidos por microcontroladores ou outros circuitos / ICs. Por exemplo, se no pino 2 (entrada do driver da primeira metade H) dermos Lógica 1 (5V), obteremos uma tensão igual a VCC2 no pino de saída correspondente do driver da primeira metade H, ou seja, pino no. 3. Similarmente para Logic 0 (0V) no Pino 2, 0V no Pino 3 aparece. Saídas (Pinos 3, 6, 11, 14): Pinos de saídas. De acordo com o sinal de entrada, o sinal de saída vem.

Movimentos motores A B

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

…………… Parar: Baixo: Baixo

…… Sentido horário: Baixo: Alto

Anti-horário: Alto: Baixo

……………. Parar: Alto: Alto

Etapa 4: diagramas de circuito para driver do motor e sensor de infravermelho

Diagramas de circuito para driver de motor e sensor infravermelho
Diagramas de circuito para driver de motor e sensor infravermelho
Diagramas de circuito para driver de motor e sensor infravermelho
Diagramas de circuito para driver de motor e sensor infravermelho
Diagramas de circuito para driver de motor e sensor infravermelho
Diagramas de circuito para driver de motor e sensor infravermelho

O ATmega32 é um microcontrolador CMOS de 8 bits de baixa potência baseado na arquitetura RISCarchitecture avançada AVR. Executando instruções poderosas em um único ciclo de clock, o ATmega32 atinge taxas de transferência de aproximadamente 1 MIPS por MHz, permitindo que o projetista do sistema otimize o consumo de energia em relação à velocidade de processamento.

O núcleo do AVR combina um rico conjunto de instruções com 32 registros de trabalho de propósito geral. Todos os 32 registros são conectados diretamente à Unidade Lógica Aritmética (ALU), permitindo que dois registros independentes sejam acessados em uma única instrução executada em um ciclo de clock. A arquitetura resultante é mais eficiente em termos de código, ao mesmo tempo em que alcança taxas de transferência até dez vezes mais rápidas do que os microcontroladores CISC convencionais.

O ATmega32 oferece os seguintes recursos:

  • 32 Kbytes de memória de programa Flash programável no sistema com recursos de leitura durante a gravação,
  • EEPROM de 1024 bytes, SRAM de 2K bytes,
  • 32 linhas de E / S de uso geral,
  • 32 registros de trabalho de uso geral,
  • uma interface JTAG para Boundaryscan,
  • Suporte e programação de depuração no chip, três temporizadores / contadores flexíveis com modos de comparação, interrupções internas e externas, um USART programável serial, uma interface serial de dois fios orientada por byte, um canal de 8
  • ADC de 10 bits com estágio de entrada diferencial opcional com ganho programável (apenas pacote TQFP),
  • um cronômetro de cão de guarda programável com oscilador interno,
  • uma porta serial SPI, e
  • seis modos de economia de energia selecionáveis por software.

    • O modo inativo para a CPU enquanto permite o USART,
    • Interface de dois fios, conversor A / D,
    • SRAM,
    • Timer / Contadores,
    • Porta SPI e
    • interrompa o sistema para continuar funcionando.
    • O modo Desligado salva o conteúdo do registro, mas congela o Oscilador, desabilitando todas as outras funções do chip até a próxima Interrupção Externa ou Reinicialização do Hardware.
    • No modo de economia de energia, o cronômetro assíncrono continua a funcionar, permitindo que o usuário mantenha uma base de cronômetro enquanto o resto do dispositivo está dormindo.
    • O modo de redução de ruído ADC interrompe a CPU e todos os módulos de E / S, exceto o temporizador assíncrono e ADC, para minimizar o ruído de comutação durante as conversões ADC
    • No modo de espera, o oscilador de cristal / ressonador está funcionando enquanto o resto do dispositivo está hibernando. Isso permite uma inicialização muito rápida combinada com baixo consumo de energia.
    • No modo Extended Standby, o oscilador principal e o temporizador assíncrono continuam a funcionar.

Todos os circuitos relacionados são fornecidos aqui e o circuito principal (atmega32) também é fornecido.

Etapa 5: programas AVr

Programas AVr
Programas AVr
Programas AVr
Programas AVr

1. Para "sensor remoto":

#include #include

#include "remote.h"

// Globals volatile unsigned int Time; // Timer principal, armazena o tempo em 10us, // Atualizado por ISR (TIMER0_COMP) volatile unsigned char BitNo; // Posição do próximo BIT volatile unsigned char ByteNo; // Posição do Byte atual

volátil sem sinal char IrData [4]; // Os quatro bytes de dados do pacote Ir // Endereço de 2 bytes Dados de 2 bytes volátil unsigned char IrCmdQ [QMAX]; // Comando final recebido (Buffer)

volátil sem sinal char PrevCmd; // Usado para repetir

// Variáveis usadas para começar a repetir somente depois que uma tecla é pressionada por certo tempo

volátil unsigned char Repeat; // 1 = sim 0 = não volátil sem sinal char RCount; // Repetir contagem

caractere volátil QFront = -1, QEnd = -1;

volatile unsigned char State; // Estado do receptor

volátil não assinado char Edge; // Limite de interrupção [RISING = 1 OR FALLING = 0]

parada int volátil sem sinal;

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

void RemoteInit () {

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

parar = 0; Estado = IR_VALIDATE_LEAD_HIGH; Edge = 0; Repetir = 0;

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

TIMSK | = (1 <

OCR0 = TIMER_COMP_VAL; // Definir valor de comparação

GetRemoteCmd de char unsigned (espera de char) {unsigned char cmd;

if (espere) enquanto (QFront == - 1); senão if (QFront == - 1) return (RC_NONE);

cmd = IrCmdQ [QFront];

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

return cmd;

}

2. principal ():

int main (void) {

uint8_t cmd = 0; DDRB = 0x08;

DDRD = 0x80;

DDRC = 0x0f; PORTC = 0x00;

while (1) // Infinite Loop para sensor IR ativo {

cmd = GetRemoteCmd (1);

switch (cmd) {

case xx: {// BOT avança // Ch + btn forwardmotor ();

pausa; // Ambos os motores na direção para frente

}

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

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

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

padrão: PORTC = 0x00; pausa; // Ambos os motores esquerdo e direito pararam}

}

} / * Fim do principal * /

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

// É um modelo básico, mas posso usá-lo no modo PWM.

//…………………………………………….. Divirta-se……………………………………………………//

Recomendado: