FAVORITAR
Faça login para como favoritoFechar

Explorando Infravermelho: Controle Remoto e Receptor com Franzininho C0

Introdução

Você já tentou descobrir a tecnologia por trás do funcionamento do controle remoto IR? Os controles remotos são dispositivos comuns, presentes em uma variedade de aparelhos, desde televisores até sistemas de som. Muitos desses dispositivos utilizam uma tecnologia relativamente simples para transmitir comandos a um receptor: o infravermelho. 

Neste tutorial, vamos aprender como utilizar a Franzininho C0 para receber e decodificar os sinais infravermelhos enviados por um controle remoto IR. 

Componentes necessários

  • 1 Franzininho C0
  • 1 Controle Remoto IR
  • 1 Receptor IR

Esquemático para montagem circuito

Controle remoto IR com Franzininho C0 no STM32CubeIDE
Controle remoto IR com Franzininho C0 no STM32CubeIDE

Funcionamento Controle Remoto IR

O controle remoto IR contém um chip, um ou mais LEDs emissores de infravermelho e um teclado integrado. Quando uma tecla é pressionada, uma sequência de pulsos de luz infravermelha é emitida pelos LEDs. Esses pulsos formam um código único para cada tecla pressionada, permitindo que o aparelho receptor interprete e execute o comando correspondente.

O controle remoto utiliza uma modulação chamada PCM (modulação codificada por pulsos). Com essa modulação, a luz externa não interfere na transmissão dos dados. Quando o pulso de dado é 1, uma frequência específica é transmitida, e quando o pulso é 0, nenhuma frequência é emitida. 

Embarcados Experience 2024: Evento Presencial

Participe do Embarcados Experience 2024 em São Paulo. Conhecimento técnico, palestras, workshops e oportunidade de networking com profissionais experientes.

Inscreva-se agora

Protocolos de Codificação de Controle Remoto IR

Existem diversos protocolos de codificação dos pulsos de sinais de infravermelho. Sendo os mais comuns: NEC, Sony, Philips, Sharp.

Neste projeto, é utilizado o protocolo NEC. No protocolo NEC cada pulso é uma rajada portadora de 38 kHz com 560 µs de comprimento (cerca de 21 ciclos). O nível lógico “1” leva 2,25 ms para transmitir, enquanto o “0” apenas metade disso, sendo 1,125 ms.

Controle remoto IR com Franzininho C0 no STM32CubeIDE

Códigos do controle utilizado

Cada tecla do Controle Remoto corresponde a uma sequência de 32 bits, que são traduzidos em um HEX Code.

TeclaCódigo Hex
00xFF9867
10xFFA25D
20xFF629D
30xFFE21D
40xFF22DD
50xFF02FD
60xFFC23D
70xFFE01F
80xFFA857
90xFF906F
*0xFF6897
#0xFFB04F
ok0xFF38C7
<0xFF10EF
>0xFF5AA5
^0xFF18E7
v0xFF4AB5

Receptor de Infravermelho 

Os receptores infravermelhos são projetados para detectar a radiação emitida por um transmissor IR, como os LEDs de um controle remoto. Quando o transmissor IR emite radiação infravermelha, essa radiação é direcionada ao receptor. Diferentemente de outros sensores infravermelhos que dependem da reflexão da radiação em objetos, os receptores de controles remotos são projetados para detectar diretamente os pulsos de luz infravermelha emitidos pelo transmissor.

Neste exemplo estamos utilizando o Módulo Receptor IR AX-1838Hs. Ele pode trabalhar com tensões de 2,1V a 5,5V. O consumo de energia é bem baixo, com uma corrente de aproximadamente 1,5 mA. A frequência de modulação dos pulsos de dados é de 38 KHz. 

Controle remoto IR com Franzininho C0 no STM32CubeIDE

Configuração CubeMX

  1. Abra STM32Cube , crie um novo projeto e selecione o microcontrolador de destino “STM32C011F6P6”. 
  1. Entre na página de configurações de relógio e ajuste HCLK para 48 MHz. Volte para a página de configuração dos pinos, selecione “Trace and Debug” e  habilite “Serial Wire.
Controle remoto IR com Franzininho C0 no STM32CubeIDE
  1. Em Sys, habilite o uso dos pinos PA9 e PA10.
  1. Em seguida, vamos configurar o Timer3. Escolha como fonte de clock “Internal Clock” e ajuste o valor do Prescaler para 48-1. Devido ao protocolo NEC necessitar de tempos pequenos, é necessário ajustar o timer para contar de 1 em 1 micro segundos. 
  1. Nosso receptor IR está conectado ao pino PA4, para essa aplicação vamos configurar esse pino no modo interrupção. Logo, clique sobre PA4 e selecione a opção “GPIO_EXT4”. Em seguida, nas configurações do GPIO, defina o modo como “External Interrupt Mode with Rising/Falling Edge Trigger Detection”.
  1. Depois, habilite a entrada correspondente no NVIC.
  1. A última configuração a ser realizada no CubeMX será da UART. Selecione o pino PA10 como “USART1_RX” e PA9 como “USART1_TX”. Em “Connectivity” selecione a opção “USART1” e em Mode escolha o “Asynchronous”. As demais configurações deixe padrão.
  1. Por fim, gere o código em “Project” > “Generate Code”.

Implementação do código

  1. Abra o arquivo main.c
  1. Inclua as seguintes bibliotecas:
  1. Crie as seguintes variáveis:
  1. Adicione os seguintes protótipos de funções:
  1. Iniciaremos pela criação da função NEC_Init():

Essa função inicia a contagem do timer, estabelecendo o valor inicial como 0. 

  1. Depois de NEC_Init(), criaremos uint8_t NEC_Available() e HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin).
  • A função NEC_Available() retorna o valor da variável flag_ir, que é usada para indicar se um código de sinal infravermelho (IR) do protocolo NEC está disponível para ser processado.
  • A função HAL_GPIO_EXTI_Falling_Callback() é um callback (retorno de chamada) que é chamado quando ocorre uma interrupção de borda de descida (falling edge) no pino GPIO especificado (GPIO_PIN_4). Dentro da função:
    • Usa o temporizador (htim3) para medir o intervalo entre pulsos IR.
    • __HAL_TIM_GetCounter(&htim3) obtém o valor do contador do temporizador.
    • Dependendo do valor do contador do temporizador, os bits do código IR são lidos e armazenados na variável code_temp.
    • Quando todos os 32 bits do código IR são lidos (bit_counter == 32), ele verifica a validade do código IR comparando cmd_l e cmd_h. Se o código IR é válido, flag_ir é setado para 1. Depois, o contador do temporizador é resetado para 0 com __HAL_TIM_SetCounter(&htim3, 0).
  1. Em seguida, crie a função NEC_Get_Code() que irá retornar o código recebido pelo receptor IR. 
  1. A última função a ser criada será a void convert_code(uint32_t code). 

Essa função converte um código IR recebido em um caractere específico, baseado na tabela de códigos hexadecimais apresentada no artigo, e o envia pela UART para outro dispositivo.

  1. Por fim, ajuste a função principal int main com o seguinte:

Na main temos:

  • Inicialização: O sistema e os periféricos são inicializados e as configurações específicas para o protocolo NEC são inicializadas.
  • Loop Infinito: O programa entra em um loop infinito onde constantemente verifica se há um código IR disponível. Se um código IR estiver disponível:
    • Obtém o código.
    • Formata o código em uma string e envia pela UART1. Passa o código recebido para a função de convert_code. 

Gravação

Ao finalizar o código, partiremos para gravação. Nessa etapa você pode utilizar o ST-Link seguindo as conexões da imagem abaixo e clicando em “run” no STM32CubeIde.

Ou você pode optar por utilizar um cabo usb e gravar conforme explicado no seguinte tutorial: gravar-franzininho-c0-via-stm32cubeprogrammer

Funcionamento

Ao clicar em uma tecla específica do controle, o valor é exibido pela Serial.

Controle remoto IR com Franzininho C0 no STM32CubeIDE

Conclusão

Neste tutorial, aprendemos a utilizar a Franzininho C0 para receber e decodificar sinais infravermelhos de um controle remoto, implementando o protocolo NEC. 

Com a montagem do circuito e a configuração do STM32CubeMX, foi possível implementar o código necessário para ler os sinais infravermelhos, decodificar os códigos recebidos e enviá-los via UART. Além disso, aprendemos a converter esses códigos em comandos específicos, que podem ser utilizados em diversas aplicações, como controle de dispositivos eletrônicos.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
0 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Home » Comunicação » Explorando Infravermelho: Controle Remoto e Receptor com Franzininho C0

EM DESTAQUE

WEBINARS

LEIA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste:


Seminário de
Sistemas Embarcados e IoT 2024
 
Data: 25/06 | Local: Hotel Holiday Inn Anhembi, São Paulo-SP
 
GARANTA SEU INGRESSO

 
close-link