Categorias: Domótica, Circuitos de microcontrolador
Número de visualizações: 17351
Comentários sobre o artigo: 0

Controle Remoto por Microcontrolador: IR Remote, Arduino, ESP8266, 433 MHz

 

A questão do controle remoto ou remoto de equipamentos elétricos sempre foi e será relevante, independentemente de haver ou não ferramentas de automação no sistema. Para a organização do controle remoto, não importa se microcontrolador, tudo depende das funções necessárias atribuídas ao dispositivo gerenciado. Neste artigo, você aprenderá informações gerais sobre como controlar remotamente um microcontrolador.

Controle remoto por microcontrolador

Espécies

Existem dois tipos principais de comunicação remota:


Com fio. Quando o controle dos atuadores localizados em uma sala (ou não na sala) é realizado no painel de controle ou em um poste de botão localizado em outro local. Nesse caso, é fornecida uma conexão elétrica dos circuitos e atuadores de controle (relés, contatores, que incluem mecanismos, como motores ou sistemas, por exemplo, iluminação).


Wireless. Nesta modalidade, nenhuma conexão elétrica dos circuitos de controle e executivo é necessária. Nos circuitos sem fio, existem dois dispositivos: um transmissor ou um controle remoto (RC) e um receptor, que faz parte do circuito controlado. O controle sem fio, por sua vez, é comum em duas versões:

  • Por sinal óptico. Esses sistemas estão em todas as casas, portanto você controla o funcionamento da TV, do ar-condicionado e de outros eletrodomésticos.

  • Por sinal de rádio. Já existem várias opções: Bluetooth, ZigBee, Wi-Fi, transmissores-receptores de 433 MHz e outras variações sobre esse assunto.

Vale ressaltar que, com os meios técnicos modernos, você pode controlar o microcontrolador, tanto pelo controle remoto quanto pela Internet em uma rede local ou com acesso de qualquer lugar do mundo.



Controle remoto IR

Começamos nossa consideração com a versão mais simples e clássica. Controle do dispositivo transmitindo um código da sequência de oscilação do LED IR para o receptor óptico instalado no dispositivo. Vale a pena notar que o espectro infravermelho não é visível ao olho humano, mas a maioria das câmeras de foto e vídeo o vê.

Como a maioria das câmeras vê infravermelho, você pode verificar manutenção de controles remotos. Para fazer isso, basta apontar o controle remoto para que o emissor olhe para a câmera e pressione os botões. Geralmente, um brilho branco com uma tonalidade roxa é visível na tela.

Esse controle tem uma desvantagem óbvia - você deve apontar o controle remoto para o receptor. E se as baterias no controle remoto se esgotarem, você também precisará mirar, pois as operações estão se tornando cada vez menos.

As vantagens são simplicidade, alta capacidade de manutenção, tanto o transmissor quanto o receptor. Você pode encontrar os detalhes desmontando os controles remotos e as televisões quebrados para aplicar isso em seus próprios projetos.

Um sensor típico é o seguinte. Como o sinal óptico está sendo recebido, é necessário excluir o disparo de fontes de luz estranhas, como o sol, lâmpadas de iluminação e outras. Também é importante notar que o sinal infravermelho é recebido principalmente a uma frequência de 38 kHz.

Sensor IR

Aqui estão as especificações de um dos sensores IR:

  • frequência portadora: 38 kHz;

  • tensão de alimentação: 2,7 - 5,5 V;

  • consumo atual: 50 μA.

E seu diagrama de conexão:

Diagrama de conexão do sensor IR

O controle remoto pode ser usado por qualquer pessoa com um princípio semelhante de operação, controles remotos de:

  • TVs

  • Leitores de DVD

  • gravadores de rádio;

  • de dispositivos de iluminação modernos, como lustres inteligentes e faixas de LED e muito mais.

Painel de controle

Aqui está um exemplo do uso desse sensor com Arduino

Exemplo de sensor de infravermelho do Arduino

Para que o microcontrolador, no nosso caso Arduin, entenda o sinal do sensor, você precisa usar a biblioteca IRremote.h. Para um exemplo de como ler um sinal de um sensor, aqui está um código para reconhecê-los lendo a porta serial do microcontrolador no Arduino IDE:

#include "IRremote.h" // conecte a biblioteca para trabalhar com o sinal IR.

IRrecv irrecv (2); // indica a saída à qual o receptor está conectado

resultados decode_results;

configuração nula () {

Serial.begin (9600); // define a velocidade da porta COM

irrecv.enableIRIn (); // inicia a recepção

}

loop vazio () {

if (irrecv.decode (& results)) {// se os dados vieram

Serial.println (resultados.valor, HEX); // imprimir dados

irrecv.resume (); // aceite o seguinte comando

  }

}

Como resultado, quando você pisca o arduino e começa a "brilhar" no receptor com o controle remoto, veremos a seguinte imagem no monitor da porta serial:

Monitor de porta serial

Esses são códigos que enviam botões em formato hexadecimal. Assim, você pode descobrir qual botão no controle remoto qual código envia, para que não haja requisitos específicos para o controle remoto usado, porque você pode reconhecer e associar algum. A propósito, essa é uma idéia para um projeto de um controle remoto universal treinado, que foi vendido anteriormente. Mas agora, na era da Internet, a quantidade de tecnologia controlada dessa maneira está diminuindo a cada ano.

E com este código, você pode reconhecer sinais e gerenciar a carga:

#include "IRremote.h"

IRrecv irrecv (2); // indica a saída à qual o receptor está conectado

resultados decode_results;

configuração nula () {

irrecv.enableIRIn (); // inicia a recepção

}

loop vazio () {

if (irrecv.decode (& results)) {// se os dados vieram

switch (results.value) {

caso 0xFFA857:

digitalWrite (13, ALTO);

quebrar;

caso 0xFFE01F:

digitalWrite (13, BAIXO);

quebrar;

    }   

irrecv.resume (); // aceite o seguinte comando

  }

}

O principal no código é o reconhecimento através da função Switch, às vezes eles são chamados de "switchcase". É um análogo dos ramos if, mas tem uma forma mais bonita de percepção. Case - estas são as opções, "se esse código chegar, então ..." O código controla 13 pinos para determinados sinais. Deixe-me lembrá-lo de que o LED embutido na placa ARDUINO está conectado ao pino 13, ou seja, o autor do código controlava o LED.

Você pode controlar qualquer coisa usando um pino digital alto ou baixo através de um transistor de potência (que abordamos em dois artigos anteriormente aqui e aqui) com uma carga de corrente direta ou através de um triac e um driver para uma carga de corrente direta, você também pode usar relés e contatores, em geral, um campo inteiro para a imaginação.


Recepção e transmissão de sinais de rádio

Para uso com microcontroladores, transmissores com frequências de operação de 433 MHz ou 315 MHz são comuns, pode haver outras frequências, dependendo da placa específica, mas essas são as mais comuns. O sistema consiste em dois nós - um receptor e um transmissor, o que é lógico.

Recepção e transmissão de sinais de rádio

Na imagem, o transmissor é mostrado na parte superior direita e o receptor na parte inferior esquerda. O nome da pesquisa: Módulo de rádio de 433MHz, MX-05V / XD-RF-5V (receptor e transmissor).

A pinagem, como costuma ser o caso dos módulos, é pintada na placa, como o transmissor:

Transmissor de rádio

O receptor não é tão óbvio, porque os dados na placa de circuito impresso são escritos por dois pinos; na verdade, um deles não é usado.

Receptor de rádio

Por exemplo, fornecemos um diagrama e um código para ligar o LED de uma placa Arduino conectada a outra placa similar, sem fios. O receptor e o transmissor estão conectados da mesma maneira às duas placas:

O receptor e o transmissor nas placas

Dispositivo

Módulo

Pinos Arduino

Receptor

Vcc

GND

DADOS

+ 5V

GND

2

Transmissor

Vcc

GND

DADOS

+ 5V

GND

2 

Em seguida, você precisa conectar a biblioteca RCswitch.h ao IDE do Arduino

Para começar, escrevemos o programa do transmissor:

#include

RCSwitch mySwitch = RCSwitch(); // cria um objeto para trabalhar com o front-end

configuração nula () {

    mySwitch.enableTransmit(2) // informa ao programa em que pino o canal de informação está conectado

}

loop vazio () {

mySwitch.send (B0100,4);

atraso (1000);

mySwitch.send (B1000, 4);

    atraso (1000);

} 

O transmissor pode transmitir código binário, mas seus valores podem ser escritos na forma decimal.

mySwitch.send (B0100,4);

e

mySwitch.send (B1000, 4);

estes são os comandos de transferência, mySwitch é o nome do transmissor que indicamos no início do código e send é o comando de transferência. Os argumentos para esta função são:

Nome do transmissor. Envio (valor, tamanho do pacote de pulsos enviados ao ar);

B1000 - o símbolo B - significa binário, pode ser escrito como o número 8, ou seja, em notação decimal. Outra opção era escrever "1000" como uma string (entre aspas).

Em seguida, escrevemos o código para o receptor (ele pisca na placa à qual o receptor está conectado):

#include

RCSwitch mySwitch = RCSwitch ();

configuração nula () {

pinMode (3, SAÍDA);

mySwitch.enableReceive (0);

}

loop vazio () {

if (mySwitch.available ()) {

valor int = mySwitch.getReceivedValue ();

if (valor == B1000)

digitalWrite (3, ALTO);

senão se (valor == B0100)

digitalWrite (3, BAIXO);

mySwitch.resetAvailable ();

    }

}

Aqui declaramos que o valor aceito é armazenado na variável Value na string mySwitch.getReceivedValue (). E o fato de o receptor estar conectado ao segundo pino é descrito aqui por mySwiitch.enableReceive (0).

O restante do código é elementar, se o sinal 0100 for recebido, o número de pino 3 será definido como alto (log. Unidade) e se 1000, e então baixo (log. Zero).

Interessante:

Na linha mySwitch.enableTransmit (0), dizemos ao programa que o receptor está conectado ao segundo pino e o modo de recepção está ativado. Os mais atentos perceberam que o argumento deste método não é o número do pino “2”, mas “0”, o fato é que o método enableTransmit (número) não aceita o número do pino, mas o número da interrupção, mas no atmega328, que é colocado em Arduino Uno, nano, promini e vários outros, no segundo pino (pino PortD PD2) trava uma interrupção com o número zero. Você pode ver isso na pinagem do Atmega aplicável à placa Arduino, os números dos pinos estão escritos em caixas cor de rosa.

Pinagem de Atmega

Esse método de transmissão e recebimento é muito simples e barato; um par de receptor e transmissor custa cerca de US $ 1,5 no momento da redação.


Wi-Fi, Adruino e ESP8266

Para começar, O ESP8266 é um microcontrolador com suporte de hardware para Wi-FiÉ vendido como um chip separado e soldado à placa, como um arduino. Possui um kernel de 32 bits, é programado através de uma porta serial (UART).

As placas geralmente têm 2 ou mais pinos GPIO gratuitos e sempre há pinos para firmware, isso deve ser feito através de um adaptador USB para serial. Gerenciado pelas equipes da AT, uma lista completa de comandos pode ser encontrada no site oficial do ESP8266 e no github.

ESP8266

Existe uma opção mais interessante: as placas NodeMCU, elas têm a capacidade de piscar via USB, porque Um conversor USB-UART já está na placa, geralmente feito em um chip CP2102. O nó MCU é um firmware, algo como um sistema operacional, um projeto baseado na linguagem de script Lua.

Placa NodeMCU

O firmware pode executar scripts Lua, aceitando-os em uma porta serial ou reproduzindo algoritmos armazenados na memória Flash.

A propósito, ele possui seu próprio sistema de arquivos, embora não haja diretórios nele, ou seja, somente arquivos sem pastas. Na memória, não apenas os scripts podem ser armazenados, mas também vários dados, ou seja, a placa pode armazenar informações gravadas, por exemplo, a partir de sensores.

A placa trabalha com interfaces:

  • 1 fio;

  • I2C;

  • SPI

  • UART.

Tem uma série de funções:

  • módulo de criptografia;

  • agendador de tarefas;

  • relógio em tempo real;

  • protocolo de sincronização de relógio via Internet SNTP;

  • temporizadores;

  • Canal ADC (um);

  • reproduzir arquivos de áudio;

  • gerar nas saídas um sinal PWM (até 6);

  • usar soquetes, há suporte para o FatFS, ou seja, você pode conectar cartões SD e assim por diante.

ESP-12E

E aqui está uma pequena lista de como o conselho pode trabalhar:

  • acelerômetros ADXL345;

  • Magnetômetros HMC5883L

  • giroscópios L3G4200D;

  • sensores de temperatura e umidade AM2320, DHT11, DHT21, DHT22, DHT33, DHT44;

  • sensores de temperatura, umidade e pressão atmosférica BME280;

  • sensores de temperatura e pressão atmosférica BMP085;

  • muitos monitores trabalhando em barramentos I2C, SPI. Com a capacidade de trabalhar com fontes diferentes;

  • Exibe TFT ILI9163, ILI9341, PCF8833, SEPS225, SSD1331, SSD1351, ST7735;

  • LEDs inteligentes e controladores de LED - WS2812, tm1829, WS2801, WS2812.

Além de usar a linguagem Lua, você pode programar a placa no IDE do Arduino.

O ESP8266 pode ser usado como um dispositivo autônomo ou como um módulo para comunicação sem fio com o Arduino.

Módulo para comunicação sem fio com o Arduino

A consideração de todas as funções e recursos deste fórum exigirá uma série de artigos.

Portanto, esta placa é uma ótima opção para controle remoto via Wi-Fi. O escopo é enorme, por exemplo, para usar um smartphone como painel de controle de uma máquina controlada por rádio ou quadrocóptero improvisada, controle de iluminação remota, até organizar redes para toda a casa e gerenciar cada tomada, lâmpada etc. se ao menos houvesse pinos suficientes.

A maneira mais simples de trabalhar com o microcontrolador é usar uma única placa ESP8266. Abaixo está um diagrama de uma tomada wi-fi simples.

Esquema da tomada wifi mais simples

Para montar este circuito, você precisa de um módulo de relé ou um relé convencional conectado a um pino através de um transistor. Primeiro você precisa de um programa para um smartphone RoboRemoFree. Nele, você configurará a conexão com o ESP e fará uma interface para controlar a tomada. Para descrever como usá-lo, você precisa escrever um artigo separado. Portanto, vamos omitir este material por enquanto.

No ESP, carregamos o seguinte firmware, através do programa ESPlorer (programa para trabalhar com a placa)

--Wifi AP Configuração

wifi.setmode (wifi.STATIONAP)

cfg = {}

cfg.ssid = "ESPTEST"

cfg.pwd = "1234567890"

wifi.ap.config (cfg)

- Definir modo Pin

my_pin_nummber = 1

--gpio.mode (my_pin_nummber, gpio.OUTPUT)

gpio.mode (my_pin_nummber, gpio.OPENDRAIN)

--Criar servidor

sv = net.createServer (net.TCP)

receptor de função (sck, dados)

se string.sub (dados, 0, 1) == "1", então

--gpio.write (my_pin_nummber, gpio.HIGH)

gpio.write (my_pin_nummber, gpio.LOW)

mais

se string.sub (dados, 0, 1) == "0", então

--gpio.write (my_pin_nummber, gpio.LOW)

gpio.write (my_pin_nummber, gpio.HIGH)

fim

fim

imprimir (dados)

fim

se sv então

sv: listen (333, função (conn)

conn: on ("receber", receptor)

conn: send ("Olá!")

final)

fim

--Criar servidor HTTP

http = net.createServer (net.TCP)

função receive_http (sck, dados)

imprimir (dados)

solicitação local = string.match (dados, "([^ \ r, \ n] *) [\ r, \ n]", 1)

if request == 'GET / on HTTP / 1.1' então

--gpio.write (my_pin_nummber, gpio.HIGH)

gpio.write (my_pin_nummber, gpio.LOW)

fim

se request == 'GET / off HTTP / 1.1' então

--gpio.write (my_pin_nummber, gpio.LOW)

gpio.write (my_pin_nummber, gpio.HIGH)

fim

sck: on ("enviado", função (sck) sck: close () collectgarbage () end)

resposta local = "HTTP / 1.0 200 OK \ r \ nServer: NodeMCU no ESP8266 \ r \ nTipo de conteúdo: text / html \ r \ n \ r \ n" ..

" NodeMCU no ESP8266 " ..

"

NodeMCU no ESP8266

" ..

"


" ..

" Ativado Desativado " ..

" "

sck: send (resposta)

fim

se http então

http: escuta (80, função (conn)

conn: on ("receber", receive_http)

final)

fim

print ("Iniciado".)

Agora você pode controlar o programa no Roboremo ou em qualquer navegador da Web. Para isso, digite o endereço IP da placa na barra de endereços no modo wi-fi, 192.168.4.1.

Há um trecho no código:

" NodeMCU no ESP8266 " ..

"

NodeMCU no ESP8266

" ..

"


" ..

" Ativado Desativado " ..

" "

Esse é um tipo de resposta emitida ao navegador ao acessar o painel. Ele contém código HTML, ou seja, A página da Web mais simples, semelhante à página em que você está lendo este artigo.

A página no navegador de um smartphone executando o sistema operacional Android

Aqui está esta página, lançada no navegador de um smartphone executando o sistema operacional Android. As instruções acima não são uma instrução completa, pois seriam muito importantes se você estiver interessado nessas informações - escreva comentários e, com certeza, faremos uma revisão e escreveremos um artigo sobre como trabalhar com elas.

Veja também em bgv.electricianexp.com:

  • Conectando e programando o Arduino para iniciantes
  • Métodos para ler e gerenciar portas de E / S do Arduino
  • O que são os displays Nextion e como trabalhar com eles?
  • Microcontroladores programáveis ​​em JavaScript: qual escolher, características ...
  • Tipos e disposição dos microcontroladores AVR

  •