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.

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.

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:

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.

Aqui está um exemplo do uso desse sensor com 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:

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.

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:

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.

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:

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.

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.

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.

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.

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.

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.

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
" .."
" ..
" 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
" ..
"
" ..
" 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.

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 electro-pt.tomathouse.com
: