Robô sem fio baseado em RF controlado por teclado

Robot inalámbrico basado en RF controlado por teclado

En robótica, los robots inalámbricos se utilizan comúnmente para aplicaciones que deben operarse de forma remota. Normalmente, estos robots se controlan con un control remoto que se conecta al robot mediante tecnología inalámbrica como RF, Zigbee, Bluetooth, Wi-Fi o una red móvil. En este tutorial, diseñarás un robot inalámbrico que se conectará al control remoto mediante el módulo RF de 434 MHz. El control remoto tendrá un teclado para controlar el movimiento del robot. Los teclados son una de las interfaces hombre-máquina (HMI) más utilizadas y desempeñan un papel importante en pequeños sistemas integrados donde se requiere interacción o entrada humana. Los teclados matriciales son bien conocidos por su arquitectura simple y facilidad de interfaz. Por tanto, en este proyecto se utiliza un teclado matricial para controlar el movimiento del robot. El control remoto también alberga una pantalla LCD de caracteres que mostrará la dirección actual en la que se mueve el robot. Por dirección, aquí nos referimos al lado delantero, trasero, izquierdo o derecho del robot.
El robot está construido sobre una rueda y un cuerpo de dos ruedas. Hay dos motores de CC con engranajes conectados a las ruedas que están controlados por el IC del controlador del motor L293D. El CI del controlador del motor interactúa con el decodificador de RF, por lo que el CI del controlador es operado por los datos de RF que pasan a través del control remoto. Mientras que el circuito de control del robot (montado en su cuerpo) es básicamente un receptor de RF acoplado al circuito del controlador del motor, el control remoto está construido alrededor del microcontrolador Atmega 32 AVR. El código de programa para el controlador AVR se escribe, compila y transfiere al controlador mediante AVR Studio.

Protótipo de robô sem fio controlado por teclado baseado em AVR

Fig. 1: Prototipo de robot inalámbrico controlado por teclado basado en AVR

Componentes necesarios –
Lista de componentes necessários para robô sem fio controlado por teclado baseado em AVR
Fig. 2: Lista de componentes necesarios para el robot inalámbrico controlado por teclado basado en AVR
Diagrama de bloques -
El circuito de control remoto del robot inalámbrico se puede representar mediante el siguiente diagrama de bloques: Diagrama de blocos do robô sem fio controlado por teclado baseado em AVR
Fig. 3: Diagrama de bloques de un robot inalámbrico controlado por teclado basado en AVR

El circuito de control montado en el robot se puede representar mediante el siguiente diagrama de bloques:

Diagrama de blocos do circuito de controle de robô sem fio controlado por teclado baseado em AVR

Fig. 4: Diagrama de bloques del circuito de control de robot inalámbrico controlado por teclado basado en AVR

Conexiones de circuito –

Hay dos circuitos electrónicos que componen este proyecto: uno es el control remoto construido con un controlador AVR Atmega 32, transmisor de RF, codificador de RF, LCD de 16X2 caracteres y teclado matricial de 4X3. El otro es el circuito de control o circuito receptor ensamblado en el robot, que se construye utilizando un receptor de RF, un decodificador de RF, un controlador de motor IC L293D y motores de CC con engranajes.

El circuito remoto tiene las siguientes conexiones de circuito:

Imagem mostrando circuito de controle remoto de robô sem fio controlado por teclado baseado em AVR
Fig. 5: Imagen que muestra el circuito de control remoto de un robot inalámbrico controlado por teclado basado en AVR

AVR Atmega 32: este es un microcontrolador basado en AVR RISC de 8 bits. Viene en un paquete de 40 pines y tiene 2 KB de RAM, 32 KB de memoria flash, 1 KB EEPROM, 32 pines de entrada y salida de propósito general (GPIO), 8 canales ADC de 10 bits, un SPI, un UART y un Interfaz TWI en chip. El controlador tiene tres temporizadores incorporados, de los cuales 2 son temporizadores de 8 bits y uno es un temporizador de 16 bits. El controlador opera hasta una frecuencia de reloj de 16 MHz. Al ejecutar potentes instrucciones en un solo ciclo de reloj, el Atmega 32 logra velocidades de transferencia cercanas a 1 MIPS por MHz, lo que permite a los diseñadores de sistemas optimizar el consumo de energía en relación con la velocidad de procesamiento. El controlador está disponible en un paquete en línea dual (DIP) de 40 pines. Consulte el diagrama de pines y la configuración de pines de este controlador AVR aquí.

Se utilizan 22 pines GPIO del controlador en el control remoto, de los cuales 11 pines se usan para interactuar con la pantalla LCD de caracteres, 7 pines se usan para conectar el teclado matricial y 4 pines se usan para conectarse con los pines de datos del IC del codificador.
LCD 16X2: La pantalla LCD 16X2 se utiliza para mostrar la dirección de movimiento actual del robot. La dirección del movimiento se expresa como hacia adelante, hacia atrás, hacia la izquierda o hacia la derecha del robot. La interfaz con el microcontrolador AVR conecta sus pines de datos al puerto B del controlador. Los pines de datos del LCD de caracteres DB0 a DB7 interactúan con AVR Atmega de 32 pines PB0 a PB7, respectivamente. Los pines RS, RW y E de la pantalla LCD están conectados a los pines PD0, PD1 y PD2 del AVR respectivamente. Las conexiones del circuito LCD de caracteres al controlador AVR se resumen en la siguiente tabla:
Tabela de listagem de conexões de circuito entre AVR ATMega32 e LCD de caracteres
Fig. 6: Tabla que enumera las conexiones del circuito entre el AVR ATMega32 y la pantalla LCD de caracteres
Teclado matricial 4X3 : se utiliza un teclado 4X3 para la entrada humana en el control remoto. El teclado tiene 12 botones dispuestos en 4 filas y 3 columnas. Este es un teclado numérico que se utiliza para controlar el movimiento del robot. Las filas y columnas de la interfaz del teclado con el controlador AVR en el siguiente esquema:
Tabela de listagem de conexões de circuito entre AVR ATMega32 e teclado
Fig. 7: Tabla que enumera las conexiones del circuito entre el AVR ATMega32 y el teclado
Este teclado matricial funciona moviéndose entre una sola fila y columna con solo presionar un botón. Cualquiera de las filas o columnas se transforma en salida digital, mientras que las demás (filas o columnas) se transforman en entrada digital. Supongamos que las filas se definen como salida digital y las columnas como entrada digital. Ahora, el controlador recorre las líneas generadas en la salida digital, configurándolas en ALTO o BAJO una tras otra y simultáneamente verifica la recepción de la misma lógica en las columnas. Entonces, a la vez, una sola fila se configura en ALTA o BAJA mientras que otras filas se configuran de manera inversa y al presionar una tecla se recibe la misma lógica en una sola columna. Esta combinación única de fila y columna le permite identificar la tecla presionada.
IC decodificador HT12E: el IC HT12E convierte los datos paralelos del controlador en datos en serie para pasarlos al transmisor de RF. El codificador IC HT12E pertenece a la serie 212 de codificadores. Se combina con decodificadores de la serie 212 con la misma cantidad de direcciones y formato de datos. El HT12E es capaz de codificar 12 bits, de los cuales 8 son bits de dirección y 4 son bits de datos. Por lo tanto, la señal codificada son datos paralelos serializados de 12 bits compuestos por datos de 4 bits que se transferirán adjuntos al byte de dirección. Los pines de datos D0, D1, D2 y D3 del IC están conectados a los pines PC0, PC1, PC2 y PC3 del controlador AVR respectivamente. Todos los pines de dirección del codificador IC están conectados a tierra, por lo que tiene un byte de dirección de 0x00. El pin 17 del IC está conectado al pin 2 del transmisor de RF. Por lo tanto, los datos serializados pasan desde el pin 17 del IC al pin de entrada de datos del transmisor de RF.
El HT12E tiene un pin de habilitación de transmisión que está activo bajo. Cuando se recibe una señal de activación en el pin TE, las direcciones/datos programados se transmiten junto con los bits del encabezado a través de un medio de transmisión de RF o infrarrojos. El HT12E inicia un ciclo de transmisión de 4 palabras después de recibir una habilitación de transmisión. Este ciclo se repite mientras el TE se mantenga bajo. Tan pronto como TE vuelve al nivel alto, la salida del codificador completa su ciclo final y luego se detiene.
Transmisor de RF: el transmisor de RF se utiliza para transmitir las señales de control para controlar el motor. El módulo transmisor de RF es un pequeño subconjunto de PCB. El módulo de RF, como su nombre indica, funciona con radiofrecuencia. El rango de frecuencia correspondiente varía entre 30 kHz y 300 GHz. En este sistema de RF, los datos digitales se representan como variaciones en la amplitud de la onda portadora. Este tipo de modulación se conoce como modulación por desplazamiento de amplitud (ASK). Este módulo RF opera a una frecuencia de 433 MHz y utiliza la técnica de modulación ASK. La configuración de pines del módulo transmisor es la siguiente
Tabela de listagem de configuração de pinos do transmissor RF
Fig. 8: Tabla que enumera la configuración de pines del transmisor de RF
Los datos serializados del codificador se reciben en el pin 2 del módulo y se pasan a la antena desde el pin 4 del módulo.
Fuente de alimentación: todos los componentes del circuito remoto requieren 5 V CC para funcionar. La energía se extrae de una batería y se regula a 5 V CC mediante 7805 IC. El 7805 es un CI regulador de voltaje de tres terminales. El pin 1 del IC está conectado al ánodo de la batería y el pin 2 está conectado a tierra. La salida de voltaje se toma del pin 3 del IC. También se conecta un LED junto con una resistencia pull-up de 10 K Ω entre la tierra común y el pin de salida para obtener una señal visual de la continuidad de la energía.
El circuito de control del robot tiene las siguientes conexiones de circuito:
Imagem do circuito de controle de robô sem fio controlado por teclado baseado em AVR
Fig. 9: Imagen del circuito de control de un robot inalámbrico controlado por teclado basado en AVR

Receptor de RF: el receptor de RF detecta la señal de radio que transporta señales de control del motor. El módulo receptor de RF tiene 8 pines y la siguiente configuración de pines:

Tabela de listagem de configuração de pinos do receptor RF
Figura 10: Tabla que enumera la configuración de pines del receptor de RF
El receptor de RF pasa los datos en serie recibidos por frecuencia de RF desde el pin 2 al pin 16 del decodificador IC.
Decodificador HT12D: la señal detectada del receptor de RF pasa al decodificador HT12D. Convierte datos en serie nuevamente en datos paralelos después de separar datos y direcciones. El HT12D pertenece a la serie 212 de decodificadores y se puede emparejar con la serie 212 de codificadores con la misma cantidad de direcciones y formato de datos. El HT12D es capaz de decodificar 12 bits, de los cuales 8 son bits de dirección y 4 son bits de datos. Los datos de 4 bits son de tipo pestillo y cuando se pasan a los pines de datos de salida permanecen sin cambios hasta que se reciben nuevos datos.
Los datos en serie recibidos por el receptor de RF se emiten en paralelo desde sus pines de datos tal como están. Los pines de datos del IC del decodificador interactúan con los pines de entrada del IC del controlador del motor L293D. Por lo tanto, la lógica digital en los pines de datos del decodificador controla la rotación de los motores de CC. Todos los pines de dirección del IC del decodificador están conectados a tierra para hacer coincidir el byte de dirección con 0x00, igual que el circuito del transmisor.
IC de controlador de motor de CC L293D: el L293D es un circuito integrado (IC) de controlador de motor de puente H dual. Los controladores de motor actúan como amplificadores de corriente en el sentido de que reciben una señal de control de corriente baja y suministran una señal de corriente más alta. Esta señal de corriente más alta se utiliza para accionar los motores. Tiene 16 pines con la siguiente configuración de pines:
Tabela de listagem de configuração de pinos do IC do driver do motor L293D
Fig. 11: Tabla que enumera la configuración de pines del CI del controlador del motor L293D
Se utilizan dos motores de CC para fabricar el automóvil robótico. Los motores de CC interactúan entre los pines 3 y 6 y los pines 14 y 11 del IC del controlador del motor.
IC L293D controla motores de CC según las siguientes tablas de verdad:
Tabela verdade do IC do driver do motor L293D
Fig. 12: Tabla de verdad del CI del controlador del motor L293D
Los pines 4, 5, 13 y 12 del L293D están conectados a tierra mientras que los pines 1, 16 y 9 están conectados a 5 VCC y el pin 8 está conectado a 12 VCC. Los pines 2, 7, 10 y 15 del IC del controlador del motor están conectados a los pines de datos D0, D1, D2 y D3 del IC del decodificador. El motor de CC conectado a la rueda derecha está conectado a los pines 11 y 14, mientras que el motor conectado a la rueda izquierda está conectado a los pines 3 y 6 del IC del controlador del motor.
Motores de CC con engranajes : en este robot, los motores con engranajes de CC de 12 V están conectados a las ruedas. Los motores de CC con engranajes están disponibles con una amplia gama de RPM y par, lo que permite que un robot se mueva según la señal de control que recibe del controlador IC del motor.
Fuente de alimentación: en el circuito receptor, el CI del controlador del motor necesita 12 VCC, mientras que el CI del receptor y decodificador de RF necesita 5 VCC para su funcionamiento. El robot recibe energía de una batería NIMH de 12 V. La energía de la batería se regula a 5 V y 12 V mediante circuitos integrados 7805 y 7812. El pin 1 de ambos circuitos integrados reguladores de voltaje está conectado al ánodo de la batería y el pin 2 de ambos circuitos integrados está conectado a tierra. Las respectivas salidas de voltaje se toman del pin 3 de los respectivos circuitos integrados reguladores de voltaje. También se conecta un LED junto con una resistencia pull-up de 10 K Ω entre la tierra común y el pin de salida para obtener una señal visual de la continuidad de la energía. A pesar de utilizar una batería de 12 V, el 7812 se utiliza para proporcionar una fuente de alimentación regulada y estable al circuito integrado del controlador del motor.
Cómo funciona el circuito –
Cuando la batería está conectada al robot, está lista para recibir datos de RF. Los datos de RF controlan directamente el robot y no se utiliza ningún controlador en la electrónica del robot. A medida que el robot recibe energía, su circuito receptor de RF se empareja con el circuito transmisor de RF del control remoto y espera la entrada del usuario. El control remoto también funciona con batería y como la batería está conectada al control remoto, primero parpadean algunos mensajes en su pantalla LCD indicando la aplicación del proyecto. Ahora el usuario puede presionar las teclas del teclado para mover el robot en diferentes direcciones. Las siguientes teclas están asignadas para la navegación del robot:
Atribuição de teclas de listagem de tabela para controle remoto do robô Arduino
Fig. 13: Tabla que enumera las asignaciones de teclas para el control remoto del Robot Arduino
Cuando se presiona una tecla en el control remoto, el código de programa la detecta y la dirección asignada a ese pin se muestra en la pantalla LCD. Al mismo tiempo, el controlador AVR pasa las señales de control del motor al decodificador IC. El robot se mueve hacia adelante, hacia atrás, hacia la izquierda o hacia la derecha implementando la siguiente lógica de entrada en los pines del controlador del motor:
Tabela lógica do IC do driver do motor L293D para o robô Arduino
Fig. 14: Tabla lógica del IC del controlador del motor L293D para el robot Arduino
Los pines de entrada del IC del controlador del motor están conectados a los pines del AVR y al cambiar la lógica digital en los pines del AVR, la lógica respectiva se implementa en los pines de entrada del IC del controlador del motor. De este modo, el usuario puede navegar por el robot con la ayuda del teclado matricial.
Guía de programación –
Sólo el control remoto está basado en controlador. El controlador utilizado en el control remoto es AVR Atmega 32. El microcontrolador ATmega32 se puede programar y cargar con código ejecutable con la ayuda de AVR Studio 4 y el compilador GCC. Consulte la siguiente guía sobre programación de controladores AVR usando AVR Studio:
Trabajar con AVR Studio
En el código del programa, se importa la biblioteca para entrada y salida digital y luego se importa la biblioteca para generación de retardo. A continuación, se declaran las constantes que representan las conexiones del teclado matricial y se declaran las funciones para obtener la entrada del usuario desde el teclado. Se definen las constantes que representan las conexiones de la pantalla LCD y se declaran las funciones utilizadas para mostrar mensajes en la pantalla LCD. Luego se declaran las funciones para controlar el movimiento del robot.

Captura de tela do código AVR para robô sem fio controlado por teclado

Fig. 15: Captura de pantalla del código AVR para robot inalámbrico controlado por teclado

Se llama a la función principal y primero se muestran algunos mensajes iniciales en la pantalla LCD.
Captura de tela da função principal no código AVR para robô sem fio controlado por teclado
Fig. 16: Captura de pantalla de la función principal en código AVR para robot inalámbrico controlado por teclado
Dentro de la función principal, se llama a un bucle while infinito en el que se llaman funciones para leer la entrada del usuario. Según la entrada del usuario, se llaman funciones para mostrar la dirección del movimiento en la pantalla LCD y funciones para enviar la señal de control del motor a los pines conectados al decodificador IC.
Captura de tela do loop while infinito no código AVR para robô sem fio controlado por teclado
Fig. 17: Captura de pantalla del bucle while infinito en código AVR para robot inalámbrico controlado por teclado

Esto completa el código AVR del control remoto. Consulte el código completo en la sección de códigos. El circuito de control del robot es un simple receptor de RF acoplado al CI del controlador del motor L293D y no implica ningún código. Así que ensúciate las manos rápidamente. Será divertido crear este robot AVR inalámbrico controlado por teclado.

Código fuente del proyecto

 ###



 //Programa para
 #incluir

 #incluir


 #definir F_CPU 1000000


 #definir USART_BAUDRATE 9600

 #define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE*16UL))) - 1)


 #definir pad PUERTA

 #definir r1 PA0

 #definir r2 PA1

 #definir r3 PA2

 #definir r4 PA3


 #definir c1 PA4

 #definir c2 PA5

 #definir c3 PA6



 // Prototipo de función para verificar la tecla presionada desde el teclado

 cheque nulo1 (anulo);

 verificación nula2 (nulo);

 cheque nulo3(nulo);

 cheque nulo4(nulo);


 #define LCD_DATA PORTB //Puerto de datos LCD


 #definir Ctrl PORTD

 #definir en PD2 //habilitar señal

 #define rw PD1 //señal de lectura/escritura

 #define rs PD0 //señal de selección de resistencia


 #define CONTROL_OUTPUT PORTC // puerto de salida para transmisión inalámbrica

 
void LCD_cmd (cmd de carácter sin firmar);

 vacío init_LCD(vacío);

 void LCD_write (datos de caracteres sin firmar);


 vacío mover_adelante;

 vacío move_backward;

 vacío giro_izquierda;

 nulo giro_derecha;


 prensa interna sin firmar;


 ent principal

 {

 valor de carácter sin firmar;

 DDRC=0x0f; // Puerto LCD_DATA como puerto de salida

 DDRB=0xFF; //señal

 DDRA = 0X0F;

 DDRD = 0X07;


 almohadilla = 0xF0;

 inicio_LCD; //inicialización de LCD

 _delay_ms(50);

 LCD_write_string("Garaje de ingenieros");

 _delay_ms(1000);

 LCD_cmd(0x01);

 LCD_write_string("Control del teclado");

 LCD_cmd(0xC0);

 LCD_write_string("Robot inalámbrico");


 mientras(1)

 {

 PUERTO=0xF0; //establece todas las entradas en una

 valor=PINA; //obtiene el valor PORTD en la variable “valor”

 if(value!=0xf0) //si se presiona alguna tecla el valor cambia

 {

 comprobar1;

 comprobar2;

 comprobar3;

 comprobar4;

 }

 }

 devolver 0;

 }


 anular check1 (anular)

 {

 almohadilla =0b11111110;

 _delay_us(10);


 si(bit_is_clear(PINA,c2))

 {

 mover_adelante;

 }

 }



 anular check2 (anular)

 {

 pad=0b11111101;

 _delay_us(10);


 si(bit_is_clear(PINA,c3))

 {

 Gire a la derecha;

 }

 }

 
cheque nulo3 (nulo)

 {

 pad=0b11111011;

 _delay_us(10);


 si(bit_is_clear(PINA,c2))

 {

 mover hacia atrás ;

 }

 }


 cheque nulo4(nulo)

 {

 almohadilla =0b11110111;

 _delay_us(10);


 si(bit_is_clear(PINA,c2))

 {

 robo_stop;

 }

 }




 vacío init_LCD (vacío)

 {


 LCD_cmd(0x38); //inicialización de LCD 16X2 en modo de 8 bits

 _delay_ms(1);


 LCD_cmd(0x01); //borrar LCD

 _delay_ms(1);


 LCD_cmd(0x0E); //cursor activado

 _delay_ms(1);


 LCD_cmd(0x80); // ---8 va a la primera línea y --0 es para la posición 0

 _delay_ms(1);

 devolver;

 }



 void LCD_cmd (cmd de carácter sin firmar)

 {

 LCD_DATA=cmd;

 control =(0< 

Diagramas de circuito

Diagrama de circuito-Control-remoto-Control-teclado-AVR-ATMega32-Robot inalámbrico
Diagrama-de-circuito-controlado-por-teclado-AVR-ATMega32-Robot-inalámbrico

Vídeo del proyecto

Volver al blog

Deja un comentario

Los comentarios deben ser aprobados antes de su publicación.