Tabla de contenido:

ROBOCAR DE CONTROL REMOTO POR INFRARROJOS UTILIZANDO AVR (ATMEGA32) MCU: 5 Pasos
ROBOCAR DE CONTROL REMOTO POR INFRARROJOS UTILIZANDO AVR (ATMEGA32) MCU: 5 Pasos

Video: ROBOCAR DE CONTROL REMOTO POR INFRARROJOS UTILIZANDO AVR (ATMEGA32) MCU: 5 Pasos

Video: ROBOCAR DE CONTROL REMOTO POR INFRARROJOS UTILIZANDO AVR (ATMEGA32) MCU: 5 Pasos
Video: TV Remote Controlled Robo.mp4 2024, Mes de julio
Anonim
ROBOCAR CONTROLADO REMOTO POR INFRARROJOS UTILIZANDO MCU AVR (ATMEGA32)
ROBOCAR CONTROLADO REMOTO POR INFRARROJOS UTILIZANDO MCU AVR (ATMEGA32)

El presente PROYECTO describe un diseño e implementación de un RoboCar con control remoto por infrarrojos (IR) que se puede utilizar para varias aplicaciones de control automatizado no tripulado. He diseñado un RoboCar a control remoto (movimiento de izquierda a derecha / de adelante hacia atrás). Todo el sistema se basa en un microcontrolador (Atmega32) que hace que el sistema de control sea más inteligente y fácil de modificar para otras aplicaciones. Permite al usuario operar o controlar un RoboCar y operar el interruptor de alimentación de red desde unos 5 metros de distancia.

Palabras clave: Decodificador IR, Microcontrolador AVR (Atmega32), Control remoto de TV, Comunicación inalámbrica

_

Paso 1: Comunicación IntraRed

Comunicación IntraRed
Comunicación IntraRed

Principio de comunicación IR:

a) transmisión de infrarrojos

El transmisor de un LED IR dentro de su circuito, que emite luz infrarroja por cada pulso eléctrico que se le da. Este pulso se genera cuando se presiona un botón en el control remoto, completando así el circuito, proporcionando polarización al LED. El LED al ser polarizado emite luz de la longitud de onda de 940nm como una serie de pulsos, correspondientes al botón presionado. Sin embargo, dado que junto con el LED IR muchas otras fuentes de luz infrarroja, como los seres humanos, las bombillas, el sol, etc., la información transmitida puede verse interferida. Una solución a este problema es la modulación. La señal transmitida se modula utilizando una frecuencia portadora de 38 KHz (o cualquier otra frecuencia entre 36 y 46 KHz). El LED de infrarrojos se hace oscilar a esta frecuencia durante el tiempo que dura el pulso. La información o las señales de luz están moduladas por ancho de pulso y están contenidas en la frecuencia de 38 KHz. La transmisión infrarroja se refiere a la energía en la región del espectro de radiación electromagnética en longitudes de onda más largas que las de la luz visible, pero más cortas que las de las ondas de radio. En consecuencia, las frecuencias infrarrojas son más altas que las de las microondas, pero más bajas que las de la luz visible. Los científicos dividen el espectro de radiación infrarroja (IR) en tres regiones. Las longitudes de onda se especifican en micrones (simbolizado µ, donde 1 µ = 10-6 metros) o en nanómetros (abreviado nm, donde 1 nm = 10-9 metros = 0,001 5). La banda de infrarrojos cercanos contiene energía en el rango de longitudes de onda más cercanas a la visible, desde aproximadamente 0,750 a 1,300 5 (750 a 1300 nm). La banda de IR intermedia (también llamada banda de IR media) consiste en energía en el rango de 1.300 a 3.000 5 (1300 a 3000 nm). La banda de infrarrojos lejanos se extiende desde 2.000 a 14.000 5 (3000 nm a 1.4000 x 104 nm).

b) Recepción IR

El receptor consta de un fotodetector que desarrolla una señal eléctrica de salida cuando la luz incide sobre él. La salida del detector se filtra mediante un filtro de banda estrecha que descarta todas las frecuencias por debajo o por encima de la frecuencia portadora (38 KHz en este caso). La salida filtrada se entrega al dispositivo adecuado, como un microcontrolador o un microprocesador, que controla dispositivos como una PC o un robot. La salida de los filtros también se puede conectar al osciloscopio para leer los pulsos.

Aplicaciones de IR:

Los infrarrojos se utilizan en una variedad de aplicaciones de control, monitoreo y comunicaciones inalámbricas. Aquí hay unos ejemplos:

· Cajas de control remoto de entretenimiento en el hogar

· Inalámbrico (redes de área local)

· Vínculos entre computadoras portátiles y computadoras de escritorio

· Módem inalámbrico

· Detectores de intrusión

· Detectores de movimiento

· Sensores de fuego

· Sistemas de visión nocturna

· Equipo de diagnóstico médico

· Sistemas de guía de misiles

· Dispositivos de seguimiento geológico

La transmisión de datos IR de un dispositivo a otro a veces se denomina transmisión.

Paso 2: Sensor de infrarrojos y protocolo NEC desde

Sensor de infrarrojos y protocolo NEC Fromat
Sensor de infrarrojos y protocolo NEC Fromat
Sensor de infrarrojos y protocolo NEC Fromat
Sensor de infrarrojos y protocolo NEC Fromat
Sensor de infrarrojos y protocolo NEC Fromat
Sensor de infrarrojos y protocolo NEC Fromat
Sensor de infrarrojos y protocolo NEC Fromat
Sensor de infrarrojos y protocolo NEC Fromat

Sensores de infrarrojos (Fig1)

TSOP1738, SFH-5110-38 (38 kHz)

Características de los sensores TSOP:

  • El preamplificador y el fotodetector están en un solo paquete
  • Filtro interno para frecuencia PCM
  • Blindaje mejorado contra perturbaciones del campo eléctrico
  • Compatibilidad TTL y CMOS
  • Salida activa baja Bajo consumo de energía
  • Alta inmunidad a la luz ambiental.
  • Posibilidad de transmisión continua de datos

Protocolo NEC:

El protocolo de transmisión NEC IR utiliza codificación de distancia de pulso de los bits del mensaje. Cada ráfaga de pulsos tiene una longitud de 562,5 µs, a una frecuencia portadora de 38 kHz (26,3 µs). Los bits lógicos se transmiten de la siguiente manera (Fig2):

  • '0' lógico: una ráfaga de impulsos de 562,5 µs seguida de un espacio de 562,5 µs, con un tiempo de transmisión total de 1,125 ms
  • '1' lógico: una ráfaga de pulsos de 562,5 µs seguida de un espacio de 1,6875 ms, con un tiempo de transmisión total de 2,25 ms

El pulso portador consta de 21 ciclos a 38 kHz. Los pulsos suelen tener una relación marca / espacio de 1: 4, para reducir el consumo de corriente:

(Fig. 3)

Cada secuencia de código comienza con un pulso de 9 ms, conocido como pulso AGC. A esto le sigue un silencio de 4,5 ms:

(Figura 4)

Luego, los datos constan de 32 bits, una dirección de 16 bits seguida de un comando de 16 bits, que se muestra en el orden en que se transmiten (de izquierda a derecha):

(Figura 5)

Los cuatro bytes de bits de datos se envían primero el bit menos significativo. La Figura 1 ilustra el formato de una trama de transmisión NEC IR, para una dirección de 00h (00000000b) y un comando de ADh (10101101b).

Se requiere un total de 67,5 ms para transmitir una trama de mensaje. Necesita 27ms para transmitir los 16 bits de dirección (dirección + inversa) y los 16 bits de comando (comando + inversa).

(Figura 6)

Tiempo necesario para transmitir la trama:

16 bits para la dirección (dirección + inversa) requieren 27 ms para transmitir el tiempo. Y los 16 bits para el comando (comando + inversa) también requieren 27 ms para transmitir el tiempo. porque (dirección + dirección inversa) o (comando + comando inverso) siempre contendrá 8 '0's y 8' 1's entonces (8 * 1.125ms) + (8 * 2.25ms) == 27 ms. de acuerdo con este tiempo total requerido para transmitir la trama es (9ms + 4.5ms + 27ms + 27ms) = 67.5 ms.

CÓDIGOS DE REPETICIÓN: Si la tecla del control remoto se mantiene presionada, se emitirá un código de repetición, generalmente alrededor de 40 ms después de la ráfaga de pulso que significó el final del mensaje. Se seguirá enviando un código de repetición a intervalos de 108 ms, hasta que finalmente se suelte la tecla. El código de repetición consta de lo siguiente, en orden:

  • una ráfaga de pulso líder de 9 ms
  • un espacio de 2.25ms
  • una ráfaga de impulsos de 562,5 µs para marcar el final del espacio (y, por tanto, el final del código de repetición transmitido).

(Figura 7)

Cálculo de retardo (1 ms):

Frecuencia de reloj = 11.0592 Mhz

Ciclo de la máquina = 12

Retraso = 1 ms

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

= 65536 - 921 = 0xFC67

Paso 3: Control de motor de CC con L293D

Control de motor de CC con L293D
Control de motor de CC con L293D

Motor de corriente continua

Un motor de CC convierte la energía eléctrica en energía mecánica que se puede utilizar para realizar muchos trabajos útiles. Puede producir movimientos mecánicos como Go Forward / Backword de mi RoboCar. Los motores de CC vienen en varias clasificaciones como 6V y 12V. Tiene dos alambres o pines. Podemos invertir la dirección de rotación invirtiendo la polaridad de entrada.

Aquí preferimos L293D ya que una clasificación de 600 mA es buena para impulsar pequeños motores de CC y los diodos de protección están incluidos en el propio IC. La descripción de cada pin es la siguiente: Pines de habilitación: Estos son los pin no. 1 y pin no. 9. Pin no. 1 se utiliza para habilitar el controlador Half-H 1 y 2. (Puente H en el lado izquierdo). Pin no. 9 se utiliza para habilitar el controlador de puente H 3 y 4. (Puente H en el lado derecho).

El concepto es simple, si desea utilizar un puente H en particular, debe dar una lógica alta a los pines de habilitación correspondientes junto con la fuente de alimentación del IC. Este pin también se puede usar para controlar la velocidad del motor usando la técnica PWM. VCC1 (Pin 16): Pin de la fuente de alimentación. Conéctelo a la fuente de 5V. VCC2 (Pin 8): Fuente de alimentación para motor. Aplique voltaje + ve según la clasificación del motor. Si desea impulsar su motor a 12V, aplique 12V en este pin.

También es posible impulsar el motor directamente en una batería, que no sea la que se usa para suministrar energía al circuito. Simplemente conecte el terminal + ve de esa batería al pin VCC2 y haga GND de ambas baterías en común. (El voltaje MÁXIMO en este pin es de 36 V según su hoja de datos). GND (Pines 4, 5, 12, 13): Conéctelos al GND común del circuito. Entradas (Pines 2, 7, 10, 15):

Estos son pines de entrada a través de los cuales los microcontroladores u otros circuitos / circuitos integrados dan señales de control. Por ejemplo, si en el pin 2 (Entrada de la primera mitad del controlador H) le damos Logic 1 (5V), obtendremos un voltaje igual a VCC2 en el pin de salida correspondiente del controlador de la primera mitad H, es decir, el pin no. 3. De manera similar, para Logic 0 (0V) en el Pin 2, aparece 0V en el Pin 3. Salidas (Pin 3, 6, 11, 14): Pines de salida. Según la señal de entrada, viene la señal de salida.

Movimientos motores A B

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

…………… Parada: Baja: Baja

…… En el sentido de las agujas del reloj: Bajo: Alto

En sentido antihorario: Alto: Bajo

……………. Parada: alta: alta

Paso 4: Diagramas de circuito para el controlador de motor y el sensor de infrarrojos

Diagramas de circuito para el controlador de motor y el sensor de infrarrojos
Diagramas de circuito para el controlador de motor y el sensor de infrarrojos
Diagramas de circuito para el controlador de motor y el sensor de infrarrojos
Diagramas de circuito para el controlador de motor y el sensor de infrarrojos
Diagramas de circuito para el controlador de motor y el sensor de infrarrojos
Diagramas de circuito para el controlador de motor y el sensor de infrarrojos

El ATmega32 es un microcontrolador CMOS de 8 bits de bajo consumo basado en la arquitectura RISC mejorada de AVR. Al ejecutar poderosas instrucciones en un solo ciclo de reloj, el ATmega32 logra rendimientos cercanos a 1 MIPS por MHz, lo que permite al diseñador del sistema optimizar el consumo de energía frente a la velocidad de procesamiento.

El núcleo AVR combina un rico conjunto de instrucciones con 32 registros de trabajo de propósito general. Todos los 32 registros están conectados directamente a la Unidad Aritmética Lógica (ALU), lo que permite acceder a dos registros independientes en una sola instrucción ejecutada en un ciclo de reloj. La arquitectura resultante es más eficiente en código y logra rendimientos hasta diez veces más rápidos que los microcontroladores CISC convencionales.

El ATmega32 ofrece las siguientes características:

  • 32 Kbytes de memoria de programa flash programable en el sistema con capacidades de lectura mientras se escribe,
  • 1024 bytes EEPROM, 2K bytes SRAM,
  • 32 líneas de E / S de propósito general,
  • 32 registros de trabajo de propósito general,
  • una interfaz JTAG para Boundaryscan,
  • Programación y soporte de depuración en chip, tres temporizadores / contadores flexibles con modos de comparación, interrupciones internas y externas, un USART programable en serie, una interfaz en serie de dos hilos orientada a bytes, una interfaz de 8 canales,
  • ADC de 10 bits con etapa de entrada diferencial opcional con ganancia programable (solo paquete TQFP),
  • un temporizador de vigilancia programable con oscilador interno,
  • un puerto serie SPI, y
  • seis modos de ahorro de energía seleccionables por software.

    • El modo inactivo detiene la CPU mientras permite el USART,
    • Interfaz de dos cables, convertidor A / D,
    • SRAM,
    • Temporizador / Contadores,
    • Puerto SPI y
    • interrumpir el sistema para seguir funcionando.
    • El modo de apagado guarda el contenido del registro pero congela el oscilador, deshabilitando todas las demás funciones del chip hasta la siguiente interrupción externa o reinicio de hardware.
    • En el modo de ahorro de energía, el temporizador asíncrono continúa funcionando, lo que permite al usuario mantener una base de temporizador mientras el resto del dispositivo está inactivo.
    • El modo de reducción de ruido de ADC detiene la CPU y todos los módulos de E / S, excepto el temporizador asíncrono y el ADC, para minimizar el ruido de conmutación durante las conversiones de ADC
    • En el modo de espera, el oscilador de cristal / resonador está funcionando mientras el resto del dispositivo está inactivo. Esto permite un arranque muy rápido combinado con un bajo consumo de energía.
    • En el modo de espera extendido, tanto el oscilador principal como el temporizador asíncrono continúan funcionando.

Todos los circuitos relacionados se dan aquí y también se da el circuito principal (atmega32).

Paso 5: Programas AVR

Programas AVR
Programas AVR
Programas AVR
Programas AVR

1. Para "sensor remoto":

#include #incluya

#include "remote.h"

// Globals volatile unsigned int Time; // Temporizador principal, almacena el tiempo en 10us, // Actualizado por ISR (TIMER0_COMP) volatile unsigned char BitNo; // Pos del siguiente BIT volátil sin firmar carácter ByteNo; // Pos del Byte actual

IrData carácter volátil sin firmar [4]; // Los cuatro bytes de datos del paquete Ir // Dirección de 2 bytes Datos de 2 bytes Carácter volátil sin firmar IrCmdQ [QMAX]; // Comando final recibido (búfer)

Carácter volátil sin firmar PrevCmd; // Usado para repetir

// Las variables utilizadas para comenzar a repetirse solo después de presionar una tecla durante cierto tiempo

carácter volátil sin firmar Repetir; // 1 = sí 0 = sin carácter volátil sin firmar RCount; // Repetir recuento

carácter volátil QFront = -1, QEnd = -1;

Estado de carácter volátil sin firmar; // Estado del receptor

borde de caracteres volátiles sin firmar; // Borde de interrupción [RISING = 1 OR FALLING = 0]

parada int volátil sin firmar;

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

void RemoteInit () {

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

detener = 0; Estado = IR_VALIDATE_LEAD_HIGH; Borde = 0; Repetir = 0;

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

TIMSK | = (1 <

OCR0 = TIMER_COMP_VAL; // Establecer valor de comparación

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

if (esperar) while (QFront == - 1); si no (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) // Bucle infinito al sensor de infrarrojos activo {

cmd = GetRemoteCmd (1);

cambiar (cmd) {

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

rotura; // Ambos motores en dirección de avance

}

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

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

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

predeterminado: PORTC = 0x00; romper; // Se detienen los motores izquierdo y derecho}

}

} / * Fin de la principal * /

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

// Es un modelo básico, pero puedo usarlo en modo PWM.

//…………………………………………….. Divertirse……………………………………………………//

Recomendado: