Categorías: Domótica, Circuitos microcontroladores
Cantidad de vistas: 17351
Comentarios sobre el artículo: 0

Control remoto por microcontrolador: control remoto IR, Arduino, ESP8266, 433 MHz

 

El tema del control remoto o remoto de los equipos eléctricos siempre ha sido y será relevante, independientemente de si hay herramientas de automatización en el sistema o no. Para la organización del control remoto no importa en absoluto si microcontrolador, todo depende de las funciones necesarias asignadas al dispositivo administrado. En este artículo, aprenderá información general sobre cómo controlar de forma remota un microcontrolador.

Control remoto microcontrolador

Especie

Hay dos tipos principales de comunicación remota:


Cableado. Cuando el control de los actuadores ubicados en una habitación (o no en la habitación) se realiza desde el panel de control o desde un poste de botones ubicado en otro lugar. En este caso, se proporciona una conexión de cable eléctrico de los circuitos de control y actuadores (relés, contactores, que incluyen mecanismos, como motores o sistemas, por ejemplo, iluminación).


Inalámbrico. En esta realización, no se requiere conexión eléctrica del control y los circuitos ejecutivos. En los circuitos inalámbricos, hay dos dispositivos: un transmisor o un control remoto (RC) y un receptor, que forma parte del circuito controlado. El control inalámbrico, a su vez, es común en dos versiones:

  • Por señal óptica. Dichos sistemas se encuentran en todos los hogares, por lo que puede controlar el funcionamiento del televisor, el aire acondicionado y otros electrodomésticos.

  • Por señal de radio. Ya hay varias opciones: Bluetooth, ZigBee, Wi-Fi, transmisores-receptores de 433 MHz y otras variaciones sobre este tema.

Vale la pena señalar que con los medios técnicos modernos puede controlar el microcontrolador, tanto desde el control remoto como a través de Internet en una red local o con acceso desde cualquier parte del mundo.



Control remoto IR

Comenzamos nuestra consideración con la versión más simple y clásica. Control del dispositivo mediante la transmisión de un código desde la secuencia de parpadeo del LED IR al receptor óptico instalado en el dispositivo. Vale la pena señalar que el espectro infrarrojo no es visible para el ojo humano, pero la mayoría de las cámaras de fotos y video lo ven.

Como la mayoría de las cámaras ven infrarrojos, puede verificar capacidad de servicio de controles remotos. Para hacer esto, simplemente apunte el control remoto para que el emisor mire a la cámara y presione los botones. Por lo general, un brillo blanco con un tinte púrpura es visible en la pantalla.

Este control tiene un inconveniente obvio: debe apuntar el control remoto hacia el receptor. Y si las baterías del control remoto se agotan, entonces también debe apuntar, ya que las operaciones son cada vez menos.

Las ventajas son simplicidad, alta capacidad de mantenimiento, tanto del transmisor como del receptor. Puede encontrar los detalles desmantelando los controles remotos y televisores rotos para aplicar esto en sus propios proyectos.

Un sensor típico es el siguiente. Dado que se recibe la señal óptica, es necesario excluir la activación de fuentes de luz extrañas, como el sol, las lámparas de iluminación y otras. También vale la pena señalar que la señal infrarroja se recibe principalmente a una frecuencia de 38 kHz.

Sensor de infrarrojos

Aquí están las especificaciones de uno de los sensores IR:

  • frecuencia portadora: 38 kHz;

  • tensión de alimentación: 2.7 - 5.5 V;

  • consumo de corriente: 50 μA.

Y su diagrama de conexión:

Diagrama de conexión del sensor IR

El control remoto puede ser utilizado por cualquier persona con un principio de funcionamiento similar, los controles remotos de:

  • Televisores

  • Reproductores de DVD

  • grabadoras de radio;

  • de dispositivos de iluminación modernos, como candelabros inteligentes y tiras LED y más.

Panel de control

Aquí hay un ejemplo del uso de dicho sensor con Arduino

Ejemplo del sensor de infrarrojos Arduino

Para que el microcontrolador, en nuestro caso Arduin, entienda la señal del sensor, debe usar la biblioteca IRremote.h. Para ver un ejemplo de cómo leer una señal de un sensor, le daremos un código para reconocerlos leyendo el puerto serie del microcontrolador del IDE de Arduino:

#include "IRremote.h" // conecta la biblioteca para trabajar con la señal IR.

IRrecv irrecv (2); // indica la salida a la que está conectado el receptor

resultados de decode_results;

configuración nula () {

Serial.begin (9600); // establece la velocidad del puerto COM

irrecv.enableIRIn (); // comienza la recepción

}

bucle vacío () {

if (irrecv.decode (& results)) {// si vinieron los datos

Serial.println (results.value, HEX); // imprimir datos

irrecv.resume (); // acepta el siguiente comando

  }

}

Como resultado, cuando parpadea el arduino y comienza a "brillar" en el receptor con el control remoto, veremos la siguiente imagen en el monitor del puerto serie:

Monitor de puerto serie

Estos son códigos que envían botones en forma hexadecimal. Por lo tanto, puede averiguar qué botón en el control remoto envía el código, por lo tanto, no hay requisitos específicos para el control remoto utilizado, ya que puede reconocer y asociar cualquiera. Por cierto, esta es una idea para un proyecto de un control remoto universal capacitado, que se vendió anteriormente. Pero ahora, en la era de Internet, la cantidad de tecnología controlada de esta manera está disminuyendo cada año.

Y con este código, puede reconocer señales y administrar la carga:

#include "IRremote.h"

IRrecv irrecv (2); // indica la salida a la que está conectado el receptor

resultados de decode_results;

configuración nula () {

irrecv.enableIRIn (); // comienza la recepción

}

bucle vacío () {

if (irrecv.decode (& results)) {// si vinieron los datos

switch (results.value) {

caso 0xFFA857:

digitalWrite (13, ALTO);

romper

caso 0xFFE01F:

digitalWrite (13, BAJO);

romper

    }   

irrecv.resume (); // acepta el siguiente comando

  }

}

Lo principal en el código es el reconocimiento a través de la función Switch, a veces se les llama "switchcase". Es un análogo de las ramas if, pero tiene una forma más hermosa de percepción. Caso: estas son las opciones, "si llega tal código, entonces ..." El código controla 13 pines para ciertas señales. Permítame recordarle que el LED incorporado en la placa ARDUINO está conectado al pin 13, es decir. El autor del código controlaba el LED.

Puede controlar cualquier cosa utilizando un pin digital alto o bajo a través de un transistor de potencia (que cubrimos en dos artículos anteriores aqui y aqui) con una carga de corriente continua, o a través de un triac y un controlador para ella con una carga de corriente continua, también puede usar relés y contactores, en general, todo un campo para la imaginación.


Recepción y transmisión de señales de radio.

Para usar con microcontroladores, los transmisores con frecuencias de funcionamiento de 433 MHz o 315 MHz son comunes, puede haber otras frecuencias, dependiendo de la placa específica, pero estas son las más comunes. El sistema consta de dos nodos: un receptor y un transmisor, lo cual es lógico.

Recepción y transmisión de señales de radio.

En la imagen, el transmisor se muestra en la parte superior derecha y el receptor en la parte inferior izquierda. Su nombre para la búsqueda: Módulo de radio 433MHz, MX-05V / XD-RF-5V (receptor y transmisor).

El pinout, como suele ser el caso en los módulos, está pintado en la placa, como el transmisor:

Transmisor de radio

El receptor no es tan obvio, porque los datos en la placa de circuito impreso se escriben sobre dos pines, de hecho, uno de ellos no se utiliza.

Receptor de radio

Por ejemplo, le damos un diagrama y un código para encender el LED de una placa Arduino conectada a otra placa similar, sin cables. El receptor y el transmisor están conectados de la misma manera a ambas placas:

El receptor y el transmisor en los tableros.

Dispositivo

Modulo

Alfileres Arduino

Receptor

Vcc

GND

DATOS

+ 5V

GND

2

Transmisor

Vcc

GND

DATOS

+ 5V

GND

2 

A continuación, debe conectar la biblioteca RCswitch.h al IDE de Arduino.

Para comenzar, escribimos el programa transmisor:

#include

RCSwitch mySwitch = RCSwitch(); // crea un objeto para trabajar con el front-end

configuración nula () {

    mySwitch.enableTransmit(2) // le dice al programa a qué pin está conectado el canal de información

}

bucle vacío () {

mySwitch.send (B0100,4);

retraso (1000);

mySwitch.send (B1000, 4);

    retraso (1000);

} 

El transmisor puede transmitir código binario, pero sus valores pueden escribirse en forma decimal.

mySwitch.send (B0100,4);

y

mySwitch.send (B1000, 4);

estos son los comandos de transferencia, mySwitch es el nombre del transmisor que indicamos al comienzo del código, y enviar es el comando de transferencia. Los argumentos para esta función son:

Nombre del transmisor.send (valor, tamaño del paquete de pulsos enviados al aire);

B1000 - el símbolo B - significa binario, podría escribirse como el número 8, es decir en notación decimal. Otra opción era escribir "1000" como una cadena (entre comillas).

A continuación, escribimos el código para el receptor (se muestra en la placa a la que está conectado el receptor):

#include

RCSwitch mySwitch = RCSwitch ();

configuración nula () {

pinMode (3, SALIDA);

mySwitch.enableReceive (0);

}

bucle vacío () {

if (mySwitch.available ()) {

valor int = mySwitch.getReceivedValue ();

if (valor == B1000)

digitalWrite (3, ALTO);

más si (valor == B0100)

digitalWrite (3, BAJO);

mySwitch.resetAvailable ();

    }

}

Aquí declaramos que el valor aceptado se almacena en la variable Valor en la cadena mySwitch.getReceivedValue (). Y mySwiitch.enableReceive (0) describe aquí el hecho de que el receptor está conectado al segundo pin.

El resto del código es elemental, si se recibe la señal 0100, entonces el pin número 3 se establece en alto (log. Unidad), y si 1000, luego en bajo (log. Cero).

Interesante

En la línea mySwitch.enableTransmit (0) le decimos al programa que el receptor está conectado al segundo pin y el modo de recepción está activado. Los más atentos notaron que el argumento de este método no es el número de pin "2", sino "0", el hecho es que el método enableTransmit (número) no acepta el número de pin, sino el número de interrupción, pero en atmega328, que se pone Arduino Uno, nano, promini y muchos otros., en el segundo pin (PortD pin PD2) cuelga una interrupción con el número cero. Puede ver esto en el pinout Atmega aplicable a la placa Arduino, los números de pin están escritos en cuadros de color rosa.

Atmega pinout

Este método de transmisión y recepción es muy simple y económico; un par de receptor y transmisor cuesta alrededor de $ 1.5 al momento de la escritura.


Wi-Fi, Adruino y ESP8266

Para empezar, ESP8266 es un microcontrolador con soporte de hardware para Wi-Fi, Se vende como un chip separado y se suelda a la placa, como un arduino. Tiene un kernel de 32 bits, se programa a través de un puerto serie (UART).

Las placas suelen tener 2 o más pines GPIO libres y siempre hay pines para firmware, esto debe hacerse a través de un adaptador USB a serie. Gestionado por equipos AT, se puede encontrar una lista completa de comandos en el sitio web oficial ESP8266 y en github.

ESP8266

Hay una opción más interesante, las placas NodeMCU, tienen la capacidad de flashear a través de USB, porque Ya hay un convertidor USB-UART en la placa, generalmente hecho en un chip CP2102. Node MCU es un firmware, algo así como un sistema operativo, un proyecto basado en el lenguaje de script Lua.

NodeMCU Board

El firmware puede ejecutar scripts de Lua, ya sea al aceptarlos en un puerto serie o al reproducir algoritmos almacenados en la memoria Flash.

Por cierto, tiene su propio sistema de archivos, aunque no hay directorios, es decir, solo archivos sin carpetas. En la memoria, no solo se pueden almacenar scripts, sino también diversos datos, es decir el tablero puede almacenar información registrada, por ejemplo, de sensores.

La placa funciona con interfaces:

  • 1 cable;

  • I2C;

  • SPI

  • UART

Tiene una gran cantidad de funciones:

  • módulo de encriptación;

  • planificador de tareas;

  • reloj de tiempo real;

  • protocolo de sincronización de reloj a través de Internet SNTP;

  • temporizadores

  • Canal ADC (uno);

  • reproducir archivos de audio;

  • generar en las salidas una señal PWM (hasta 6);

  • use sockets, hay soporte para FatFS, es decir, puede conectar tarjetas SD, etc.

ESP-12E

Y aquí hay una breve lista de con qué puede trabajar la junta:

  • acelerómetros ADXL345;

  • Magnetómetros HMC5883L

  • giroscopios L3G4200D;

  • sensores de temperatura y humedad AM2320, DHT11, DHT21, DHT22, DHT33, DHT44;

  • sensores de temperatura, humedad, presión atmosférica BME280;

  • sensores de temperatura y presión atmosférica BMP085;

  • Muchas pantallas funcionan en buses I2C, SPI. Con la capacidad de trabajar con diferentes fuentes;

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

  • LED inteligentes y controladores LED - WS2812, tm1829, WS2801, WS2812.

Además de usar el lenguaje Lua, puede programar la placa desde debajo del IDE de Arduino.

ESP8266 puede usarse como un dispositivo independiente o como un módulo para la comunicación inalámbrica con Arduino.

Módulo para comunicación inalámbrica con Arduino

La consideración de todas las funciones y características de este foro requerirá una serie completa de artículos.

Por lo tanto, esta placa es una excelente opción para el control remoto a través de Wi-Fi. El alcance es enorme, por ejemplo, para usar un teléfono inteligente como panel de control para una máquina o quadrocopter improvisada con control de radio, control remoto de iluminación, hasta organizar redes para toda la casa y administrar cada toma de corriente, lámpara, etc. si solo hubiera suficientes alfileres.

La forma más sencilla de trabajar con el microcontrolador es usar una sola placa ESP8266. A continuación se muestra un diagrama de un simple enchufe de wi-fi.

Esquema de la salida wifi más simple

Para ensamblar este circuito, necesita un módulo de relé o un relé convencional conectado a un pin a través de un transistor. Primero necesita un programa para un teléfono inteligente RoboRemoFree. En él, configurará la conexión al ESP y creará una interfaz para controlar la salida. Para describir cómo usarlo, debe escribir un artículo por separado, así que omita este material por ahora.

En ESP cargamos el siguiente firmware, a través del programa ESPlorer (programa para trabajar con la placa)

- Configuración de AP WiFi

wifi.setmode (wifi.STATIONAP)

cfg = {}

cfg.ssid = "ESPTEST"

cfg.pwd = "1234567890"

wifi.ap.config (cfg)

- Establecer modo Pin

my_pin_nummber = 1

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

gpio.mode (my_pin_nummber, gpio.OPENDRAIN)

- Crear servidor

sv = net.createServer (net.TCP)

receptor de funciones (sck, datos)

if string.sub (data, 0, 1) == "1" entonces

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

gpio.write (my_pin_nummber, gpio.LOW)

otra cosa

if string.sub (data, 0, 1) == "0" entonces

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

gpio.write (my_pin_nummber, gpio.HIGH)

fin

fin

imprimir (datos)

fin

si sv entonces

sv: escuchar (333, función (conn)

conn: on ("recibir", receptor)

conn: send ("¡Hola!")

fin)

fin

- Crear servidor HTTP

http = net.createServer (net.TCP)

función recibir_http (sck, datos)

imprimir (datos)

solicitud local = string.match (datos, "([^ \ r, \ n] *) [\ r, \ n]", 1)

if request == 'GET / on HTTP / 1.1' then

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

gpio.write (my_pin_nummber, gpio.LOW)

fin

if request == 'GET / off HTTP / 1.1' entonces

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

gpio.write (my_pin_nummber, gpio.HIGH)

fin

sck: on ("enviado", función (sck) sck: close () collectgarbage () end)

respuesta local = "HTTP / 1.0 200 OK \ r \ n Servidor: NodeMCU en ESP8266 \ r \ n Tipo de contenido: texto / html \ r \ n \ r \ n" ..

" NodeMCU en ESP8266 " ..

"

NodeMCU en ESP8266

" ..

"


" ..

" On Off " ..

" "

sck: enviar (respuesta)

fin

si http entonces

http: escuchar (80, función (conn)

conn: on ("recibir", recibir_http)

fin)

fin

print ("Iniciado")

Ahora puede controlar el programa desde el programa Roboremo o mediante cualquier navegador web, para esto debe escribir la dirección IP de la placa en la barra de direcciones en el modo de punto wi-fi 192.168.4.1.

Hay un fragmento en el código:

" NodeMCU en ESP8266 " ..

"

NodeMCU en ESP8266

" ..

"


" ..

" On Off " ..

" "

Este es un tipo de respuesta que se emite al navegador cuando se accede a la placa. Contiene código HTML, es decir La página web más simple, similar a la que está leyendo este artículo.

La página en el navegador del teléfono inteligente con sistema operativo Android

Aquí está esta página, lanzada en el navegador de un teléfono inteligente con sistema operativo Android. Lo anterior no es una instrucción completa, ya que tomaría una gran cantidad, si está interesado en esta información, escriba comentarios y definitivamente realizaremos una revisión y un artículo sobre cómo trabajar con ella.

Ver también en i.electricianexp.com:

  • Conectando y programando Arduino para principiantes
  • Métodos para leer y administrar puertos de E / S Arduino
  • ¿Qué son las pantallas Nextion y cómo trabajar con ellas?
  • Microcontroladores programables en JavaScript: cuál elegir, características ...
  • Tipos y disposición de microcontroladores AVR

  •