Robô sem fio baseado em RF controlado por teclado

Na robótica, os robôs sem fio são comumente usados ​​para aplicações que precisam ser operadas remotamente. Normalmente, esses robôs são controlados com um controle remoto que se conecta ao robô usando uma tecnologia sem fio como RF, Zigbee, Bluetooth, Wi-Fi ou rede móvel. Neste tutorial, será projetado um robô sem fio que se conectará ao controle remoto usando o módulo RF de 434 MHz. O controle remoto terá um teclado para controlar o movimento do robô. Os teclados são uma das interfaces homem-máquina (HMI) comumente usadas e desempenham um papel importante em pequenos sistemas embarcados onde a interação ou entrada humana é necessária. Os teclados matriciais são bem conhecidos por sua arquitetura simples e facilidade de interface. Portanto, neste projeto, um teclado matricial é usado para controlar o movimento do robô. O controle remoto também abriga um LCD de caracteres que exibirá a direção atual em que o robô está se movendo. Pela direção, aqui se entende o lado para frente, para trás, esquerdo ou direito do robô.
O robô é construído sobre um rodízio e um corpo de duas rodas. Existem dois motores DC com engrenagens conectados às rodas que são controlados pelo IC do driver do motor L293D. O IC do driver do motor faz interface com o decodificador de RF, de modo que o IC do driver é operado pelos dados de RF passados ​​​​pelo controle remoto. Enquanto o circuito de controle do robô (montado em seu corpo) é basicamente um receptor RF acoplado ao circuito do driver do motor, o controle remoto é construído em torno do microcontrolador Atmega 32 AVR. O código do programa para o controlador AVR é ​​escrito, compilado e transferido para o controlador usando o AVR Studio.

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

Fig. 1: Protótipo de robô sem fio controlado por teclado baseado em AVR

Componentes necessários –
Lista de componentes necessários para robô sem fio controlado por teclado baseado em AVR
Fig. 2: Lista de componentes necessários para robô sem fio controlado por teclado baseado em AVR
Diagrama de bloco –
O circuito do controle remoto do robô sem fio pode ser representado pelo seguinte diagrama de blocos – Diagrama de blocos do robô sem fio controlado por teclado baseado em AVR
Fig. 3: Diagrama de blocos do robô sem fio controlado por teclado baseado em AVR

O circuito do circuito de controle montado no robô pode ser representado pelo seguinte diagrama de blocos –

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

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

Conexões de Circuito –

São dois circuitos eletrônicos que compõem este projeto – um é o controle remoto construído com controlador AVR Atmega 32, transmissor RF, codificador RF, LCD 16X2 caracteres e teclado matricial 4X3. O outro é o circuito de controle ou circuito receptor montado no robô que é construído usando receptor RF, decodificador RF, IC de driver de motor L293D e motores CC com engrenagens.

O circuito remoto tem as seguintes conexões de circuito –

Imagem mostrando circuito de controle remoto de robô sem fio controlado por teclado baseado em AVR
Fig. 5: Imagem mostrando circuito de controle remoto de robô sem fio controlado por teclado baseado em AVR

AVR Atmega 32 – Este é um microcontrolador baseado em AVR RISC de 8 bits. Ele vem em um pacote de 40 pinos e possui 2 KB de RAM, 32 KB de memória flash, 1 KB EEPROM, 32 pinos de entrada e saída de uso geral (GPIO), 8 canais ADC de 10 bits, um SPI, um UART e uma interface TWI no chip. O controlador possui três temporizadores integrados, dos quais 2 são temporizadores de 8 bits e um é um temporizador de 16 bits. O controlador opera até uma frequência de clock de 16 MHz. Ao executar instruções poderosas em um único ciclo de clock, o Atmega 32 atinge taxas de transferência próximas de 1 MIPS por MHz, permitindo que os projetistas do sistema otimizem o consumo de energia em relação à velocidade de processamento. O controlador está disponível em pacote Dual Inline (DIP) de 40 pinos. Confira o diagrama de pinos e a configuração dos pinos deste Controlador AVR aqui.

No controle remoto são usados ​​22 pinos GPIO do controlador, dos quais 11 pinos são usados ​​para fazer a interface com o LCD de caracteres, 7 pinos são usados ​​para fazer a interface do teclado matricial e 4 pinos são usados ​​para conectar com os pinos de dados do codificador IC.
LCD 16X2: O display LCD 16X2 é usado para exibir a direção atual do movimento do robô. A direção do movimento é expressa como para frente, para trás, lado esquerdo ou direito do robô. O faz interface com o microcontrolador AVR conectando seus pinos de dados à porta B do controlador. Os pinos de dados DB0 a DB7 do LCD de caracteres fazem interface com os pinos PB0 a PB7 do AVR Atmega 32, respectivamente. Os pinos RS, RW e E do LCD estão conectados aos pinos PD0, PD1 e PD2 do AVR respectivamente. As conexões do circuito do LCD de caracteres com o controlador AVR estão resumidas na tabela a seguir –
Tabela de listagem de conexões de circuito entre AVR ATMega32 e LCD de caracteres
Fig. 6: Tabela listando as conexões do circuito entre o AVR ATMega32 e o Character LCD
Teclado Matriz 4X3 – Um teclado 4X3 é usado para entrada humana no controle remoto. O teclado possui 12 botões dispostos em 4 linhas e 3 colunas. Este é um teclado numérico usado para controlar o movimento do robô. As linhas e colunas do teclado fazem interface com o controlador AVR no seguinte esquema –
Tabela de listagem de conexões de circuito entre AVR ATMega32 e teclado
Fig. 7: Tabela listando as conexões do circuito entre o AVR ATMega32 e o teclado
Esse teclado matricial opera conduzindo entre uma única linha e coluna ao pressionar um botão. Qualquer uma das linhas ou colunas é transformada em saída digital, enquanto as outras restantes (linhas ou colunas) são transformadas em entrada digital. Suponha que as linhas sejam definidas como saída digital e as colunas como entrada digital. Agora, o controlador percorre as linhas geradas na saída digital, configurando-as em HIGH ou LOW uma após a outra e verifica simultaneamente a recepção da mesma lógica nas colunas. Assim, por vez, uma linha única é definida como HIGH ou LOW enquanto outras linhas são definidas inversamente e ao pressionar uma tecla a mesma lógica é recebida em uma coluna única. Esta combinação única de linha e coluna permite identificar a tecla pressionada.
IC decodificador HT12E – O IC HT12E converte os dados paralelos do controlador em dados seriais para passá-los ao transmissor RF. O codificador IC HT12E pertence à série 212 de codificadores. É emparelhado com decodificadores da série 212 com o mesmo número de endereços e formato de dados. O HT12E é capaz de codificar 12 bits, dos quais 8 são bits de endereço e 4 são bits de dados. Assim, o sinal codificado é um dado paralelo serializado de 12 bits composto por dados de 4 bits a serem transferidos anexados ao byte de endereço. Os pinos de dados D0, D1, D2 e ​​D3 do IC estão conectados aos pinos PC0, PC1, PC2 e PC3 do controlador AVR respectivamente. Todos os pinos de endereço do IC do codificador são conectados ao terra, portanto, ele possui um byte de endereço 0x00. O pino 17 do IC está conectado ao pino 2 do transmissor RF. Assim, os dados serializados são passados ​​do pino 17 do IC para o pino de entrada de dados do transmissor RF.
O HT12E possui um pino de habilitação de transmissão que está ativo em nível baixo. Quando um sinal de disparo é recebido no pino TE, os endereços/dados programados são transmitidos juntamente com os bits do cabeçalho através de um meio de transmissão RF ou infravermelho. O HT12E inicia um ciclo de transmissão de 4 palavras após receber uma habilitação de transmissão. Este ciclo é repetido enquanto o TE for mantido baixo. Assim que TE retorna para nível alto, a saída do encoder completa seu ciclo final e então para.
Transmissor RF – O transmissor RF é usado para transmitir os sinais de controle para controle do motor. O módulo transmissor de RF é um pequeno subconjunto de PCB. O módulo RF, como o nome sugere, opera em Radiofrequência. A faixa de frequência correspondente varia entre 30 kHz e 300 GHz. Neste sistema de RF, os dados digitais são representados como variações na amplitude da onda portadora. Este tipo de modulação é conhecido como Amplitude Shift Keying (ASK). Este módulo RF opera na frequência de 433 MHz e usa a técnica de modulação ASK. A configuração dos pinos do módulo transmissor é a seguinte
Tabela de listagem de configuração de pinos do transmissor RF
Fig. 8: Tabela listando a configuração dos pinos do transmissor RF
Os dados serializados do codificador são recebidos no pino 2 do módulo e repassados ​​para a antena a partir do pino 4 do módulo.
Fonte de Alimentação – Todos os componentes do circuito remoto necessitam de 5V DC para seu funcionamento. A energia é extraída de uma bateria e regulada para 5 Vcc usando 7805 IC. O 7805 é um IC regulador de tensão com três terminais. O pino 1 do IC está conectado ao ânodo da bateria e o pino 2 está conectado ao terra. A saída de tensão é extraída do pino 3 do IC. Um LED junto com um resistor pull-up de 10K Ω também é conectado entre o terra comum e o pino de saída para obter uma dica visual da continuidade da alimentação.
O circuito de controle do robô possui as seguintes conexões de circuito –
Imagem do circuito de controle de robô sem fio controlado por teclado baseado em AVR
Fig. 9: Imagem do circuito de controle do robô sem fio controlado por teclado baseado em AVR

Receptor RF – O receptor RF detecta o sinal de rádio que transporta os sinais de controle do motor. O módulo receptor RF possui 8 pinos e a seguinte configuração de pinos –

Tabela de listagem de configuração de pinos do receptor RF
Figura 10: Tabela listando a configuração dos pinos do receptor RF
O receptor RF passa os dados seriais recebidos pela frequência RF do pino 2 para o pino 16 do IC decodificador.
Decodificador HT12D – O sinal detectado do receptor RF é passado para o decodificador HT12D. Ele converte os dados seriais de volta em dados paralelos após separar dados e endereços. O HT12D pertence à série 212 de decodificadores e pode ser emparelhado com a série 212 de codificadores com o mesmo número de endereços e formato de dados. O HT12D é capaz de decodificar 12 bits, dos quais 8 são bits de endereço e 4 são bits de dados. Os dados de 4 bits são do tipo latch e quando passados ​​para os pinos de dados de saída permanecem inalterados até que novos dados sejam recebidos.
Os dados seriais recebidos pelo receptor RF são emitidos paralelamente a partir de seus pinos de dados como estão. Os pinos de dados do IC decodificador fazem interface com os pinos de entrada do IC do driver do motor L293D. Assim, a lógica digital nos pinos de dados do decodificador controla a rotação dos motores DC. Todos os pinos de endereço do IC decodificador são conectados ao terra para corresponder ao byte de endereço com 0x00 igual ao circuito transmissor.
IC do driver do motor CC L293D – O L293D é um circuito integrado (IC) de driver de motor com ponte H dupla. Os drivers do motor atuam como amplificadores de corrente, pois recebem um sinal de controle de baixa corrente e fornecem um sinal de corrente mais alta. Este sinal de corrente mais alto é usado para acionar os motores. Possui 16 pinos com a seguinte configuração de pinos:
Tabela de listagem de configuração de pinos do IC do driver do motor L293D
Fig. 11: Tabela listando a configuração dos pinos do IC do driver do motor L293D
Existem dois motores DC usados ​​para fazer o carro robótico. Os motores DC fazem interface entre os pinos 3 e 6 e os pinos 14 e 11 do IC do driver do motor.
O IC L293D controla os motores DC de acordo com as seguintes tabelas verdade:
Tabela verdade do IC do driver do motor L293D
Fig. 12: Tabela verdade do IC do driver do motor L293D
Os pinos 4, 5, 13 e 12 do L293D são aterrados enquanto os pinos 1, 16 e 9 estão conectados a 5 Vcc e o pino 8 está conectado a 12 Vcc. Os pinos 2, 7, 10 e 15 do IC do driver do motor estão conectados aos pinos de dados D0, D1, D2 e ​​D3 do IC decodificador. O motor DC conectado à roda direita está conectado aos pinos 11 e 14, enquanto o motor conectado à roda esquerda está conectado aos pinos 3 e 6 do IC do driver do motor.
Motores DC engrenados – Neste robô, motores redutores DC de 12V são acoplados às rodas. Os motores DC com engrenagens estão disponíveis com uma ampla faixa de RPM e Torque, o que permite que um robô se mova com base no sinal de controle que recebe do IC do driver do motor.
Fonte de energia – No circuito receptor, o IC do driver do motor precisa de 12 Vcc, enquanto o receptor RF e o IC decodificador precisam de 5 Vcc para sua operação. O robô recebe energia de uma bateria NIMH de 12V. A alimentação da bateria é regulada para 5V e 12V usando CIs 7805 e 7812. O pino 1 de ambos os CIs reguladores de tensão está conectado ao ânodo da bateria e o pino 2 de ambos os CIs está conectado ao terra. As respectivas saídas de tensão são extraídas do pino 3 dos respectivos CIs reguladores de tensão. Um LED junto com um resistor pull-up de 10K Ω também é conectado entre o terra comum e o pino de saída para obter uma dica visual da continuidade da alimentação. Apesar de usar bateria de 12 V, o 7812 é usado para fornecer uma alimentação regulada e estável ao IC do driver do motor.
Como funciona o circuito –
Quando a bateria é conectada ao robô, ele fica pronto para receber dados de RF. Os dados de RF controlam diretamente o robô e não há controlador usado na eletrônica do robô. À medida que o robô é alimentado, seu circuito receptor de RF emparelha com o circuito transmissor de RF do controle remoto e aguarda a entrada do usuário. O controle remoto também funciona com bateria e como a bateria está acoplada no controle remoto, primeiro algumas mensagens piscam em seu display LCD indicando a aplicação do projeto. Agora o usuário pode pressionar as teclas do teclado para mover o robô em diferentes direções. As seguintes teclas são atribuídas para a navegação do robô –
Atribuição de teclas de listagem de tabela para controle remoto do robô Arduino
Fig. 13: Tabela listando atribuição de teclas para controle remoto do Robô Arduino
Quando uma tecla é pressionada no controle remoto, ela é detectada pelo código do programa e a direção atribuída a esse pino é exibida no LCD. Ao mesmo tempo, os sinais de controle do motor são passados ​​para o IC decodificador pelo controlador AVR. O robô é movido para frente, para trás, para a esquerda ou para a direita implementando a seguinte lógica de entrada nos pinos do driver do motor –
Tabela lógica do IC do driver do motor L293D para o robô Arduino
Fig. 14: Tabela lógica do IC do driver do motor L293D para o robô Arduino
Os pinos de entrada do IC do driver do motor são conectados aos pinos do AVR e alterando a lógica digital nos pinos do AVR, a respectiva lógica é implementada nos pinos de entrada do IC do driver do motor. Assim, o usuário pode navegar no robô com a ajuda do teclado matricial.
Guia de programação –
Apenas o controle remoto é baseado no controlador. O controlador usado no controle remoto é o AVR Atmega 32. O microcontrolador ATmega32 pode ser programado e carregado com o código executável com a ajuda do AVR Studio 4 e do compilador GCC. Confira o seguinte guia sobre programação de controladores AVR usando AVR Studio –
Trabalhando com AVR Studio
No código do programa, a biblioteca para entrada e saída digital é importada seguida pela importação da biblioteca para geração de atrasos. Em seguida, as constantes que representam as conexões do teclado matricial são declaradas e as funções para obter a entrada do usuário do teclado são declaradas. As constantes que representam as conexões do LCD são definidas e as funções utilizadas para exibir mensagens no LCD são declaradas. As funções para controlar o movimento do robô são então declaradas.

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

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

A função principal é chamada e primeiro algumas mensagens iniciais são exibidas no LCD.
Captura de tela da função principal no código AVR para robô sem fio controlado por teclado
Fig. 16: Captura de tela da função principal no código AVR para robô sem fio controlado por teclado
Dentro da função principal, é chamado um loop while infinito no qual são chamadas as funções para ler a entrada do usuário. Com base na entrada do usuário, são chamadas as funções para exibir a direção do movimento no display LCD e as funções para enviar o sinal de controle do motor aos pinos conectados ao IC decodificador.
Captura de tela do loop while infinito no código AVR para robô sem fio controlado por teclado
Fig. 17: Captura de tela do loop while infinito no código AVR para robô sem fio controlado por teclado

Isto completa o código AVR do controle remoto. Confira o código completo na seção de código. O circuito de controle do robô é um receptor RF simples acoplado ao IC do driver do motor L293D e não possui nenhum código envolvido. Então, coloque a mão na massa rapidamente. Será divertido fazer este robô AVR sem fio controlado por teclado.

Código fonte do projeto

###



//Program to
#include

#include


#define F_CPU 1000000


#define USART_BAUDRATE 9600

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


#define pad PORTA

#define r1 PA0

#define r2 PA1

#define r3 PA2

#define r4 PA3


#define c1 PA4

#define c2 PA5

#define c3 PA6



// Function prototype to check key pressed from keypad 

void check1(void);

void check2(void);  

void check3(void);

void check4(void);


#define LCD_DATA PORTB //LCD data port


#define ctrl PORTD

#define en PD2 //enable signal

#define rw PD1 //read/write signal

#define rs PD0 //resister select signal


#define CONTROL_OUTPUT PORTC // output port for wireless transmission


void LCD_cmd(unsigned char cmd);

void init_LCD(void);

void LCD_write(unsigned char data);


void move_forward ;

void move_backward ;

void turn_left ;

void turn_right ;


unsigned int press;


int main 

{

    unsigned char value; 

    DDRC=0x0f; //LCD_DATA port as output port

    DDRB=0xFF; //signal

    DDRA = 0X0F;

    DDRD = 0X07; 


    pad = 0xF0;

    init_LCD ; //initialization of LCD

    _delay_ms(50);

    LCD_write_string("EngineersGarage");

    _delay_ms(1000);

    LCD_cmd(0x01);

    LCD_write_string("Keypad Cntrld");

    LCD_cmd(0xC0);

    LCD_write_string("Wireless Robot");


    while(1)

    {

PORTA=0xF0; //set all the input to one

value=PINA; //get the PORTD value in variable “value”

if(value!=0xf0) //if any key is pressed value changed

{

    check1 ;

    check2 ;

    check3 ;

    check4 ;

}

    }

    return 0;

}


void check1(void)

{

    pad =0b11111110;

    _delay_us(10);


    if(bit_is_clear(PINA,c2))

    {

move_forward ;

    }

}



void check2(void)

{

    pad=0b11111101;

    _delay_us(10);


    if(bit_is_clear(PINA,c3))

    {

turn_right ;

    }

}


void check3(void)

{

    pad=0b11111011;

    _delay_us(10);


    if(bit_is_clear(PINA,c2))

    {

move_backward ;

    }

}


void check4(void)

{

    pad =0b11110111;

    _delay_us(10);


    if(bit_is_clear(PINA,c2))

    {

robo_stop ;

    }

}




void init_LCD(void)

{


    LCD_cmd(0x38); //initializtion of 16X2 LCD in 8bit mode

    _delay_ms(1);


    LCD_cmd(0x01); //clear LCD

    _delay_ms(1);


    LCD_cmd(0x0E); //cursor ON

    _delay_ms(1);


    LCD_cmd(0x80); // ---8 go to first line and --0 is for 0th position

    _delay_ms(1);

    return;

}



void LCD_cmd(unsigned char cmd)

{

    LCD_DATA=cmd;

    ctrl =(0<

 

Diagramas de circuito

Diagrama de circuito-controle remoto-teclado-controlado-AVR-ATMega32-Robô sem fio
Circuito-Diagrama-Teclado-Controlado-AVR-ATMega32-Wireless-Robot

Vídeo do projeto

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.