Categories: Domòtica, Circuits de microcontroladors
Nombre de visualitzacions: 17351
Comentaris sobre l'article: 0

Control Remot de Microcontrolador: Comandament IR, Arduino, ESP8266, 433 MHz

 

La qüestió del control remot o remot d’equips elèctrics sempre ha estat i serà rellevant, independentment de si hi ha eines d’automatització al sistema o no. Per a l’organització del control remot, no importa en absolut si microcontrolador, tot depèn de les funcions necessàries assignades al dispositiu gestionat. En aquest article, obtindreu informació general sobre com controlar de forma remota un microcontrolador.

Comandament a distància del microcontrolador

Espècie

Hi ha dos tipus principals de comunicacions remotes:


Per cable. Quan es fa el control dels actuadors situats en una habitació (o no a la sala) des del quadre de comandament o des d’un pal de botó situat en un altre lloc. En aquest cas, es proporciona una connexió de fil elèctric dels circuits i actuadors de control (relés, contactors, que inclouen mecanismes, com motors o sistemes, per exemple, il·luminació).


Wireless. En aquesta realització, no es requereix cap connexió elèctrica del circuit de control i executiu. Als circuits sense fils, hi ha dos dispositius: un transmissor o un comandament a distància (RC) i un receptor, que forma part del circuit controlat. Al seu torn, el control sense fils és comú en dues versions:

  • Per senyal òptic. Aquests sistemes es troben a totes les llars, de manera que controles el funcionament del televisor, l’aire condicionat i altres electrodomèstics.

  • Per senyal de ràdio. Ja hi ha diverses opcions: Bluetooth, ZigBee, Wi-Fi, emissors-receptors de 433 MHz i altres variacions sobre aquest tema.

Val la pena assenyalar que amb mitjans tècnics moderns podeu controlar el microcontrolador, tant des del comandament a distància com a través d’Internet a través d’una xarxa local o amb accés des de qualsevol lloc del món.



Comandament IR

Comencem la nostra consideració amb la versió més simple i clàssica. Control del dispositiu mitjançant la transmissió d’un codi de la seqüència parpelleig del LED IR al receptor òptic instal·lat al dispositiu. Val la pena assenyalar que l’espectre d’infrarojos no és visible a l’ull humà, però la majoria de càmeres de fotos i vídeos ho veuen.

Com que la majoria de càmeres veuen infrarojos, podeu comprovar-ho servei de comandaments a distància. Per fer-ho, només cal que apunteu el comandament a distància perquè l'emissor miri la càmera i premeu els botons. Normalment, a la pantalla es pot veure un resplendor blanc amb una tonalitat morada.

Aquest control té un inconvenient evident: heu d'apuntar el comandament cap al receptor. I si les bateries del comandament a distància s’esgoten, també heu d’apuntar, ja que les operacions són cada cop menys.

Els avantatges són la simplicitat, alta manteniment, tant del transmissor com del receptor. Podeu trobar els detalls desmuntant els comandaments i televisions trencats per aplicar-ho als vostres propis projectes.

Un sensor típic és el següent. Atès que s'està rebent el senyal òptic, cal excloure l'actuació de fonts de llum alienes, com el sol, les llums d'il·luminació i altres. També convé destacar que el senyal d’infrarojos es rep principalment a una freqüència de 38 kHz.

Sensor IR

A continuació es mostren les especificacions d’un dels sensors IR:

  • freqüència portadora: 38 kHz;

  • tensió d’alimentació: 2,7 - 5,5 V;

  • consum actual: 50 μA.

I el seu esquema de connexió:

Esquema de connexió del sensor IR

El comandament a distància pot ser utilitzat per qualsevol persona amb un principi de funcionament similar, i comandaments a distància des de:

  • Televisors

  • Reproductors de DVD

  • gravadores de cinta de ràdio;

  • des de dispositius d’il·luminació moderns, com ara llums d’argent intel·ligents i tires LED i molt més.

Tauler de control

Aquí teniu un exemple d’ús d’aquest sensor amb Arduino

Exemple de sensor IR Arduino

Per tal que el microcontrolador, en el nostre cas Arduin, entengui el senyal del sensor, heu d'utilitzar la biblioteca IRremote.h. Per obtenir un exemple de com llegir un senyal d’un sensor, donarem un codi per reconèixer-los llegint el port sèrie del microcontrolador de l’ID Arduino:

#include "IRremote.h" // connectar la biblioteca per treballar amb el senyal IR.

IRrecv irrecv (2); // indiqueu la sortida a la qual està connectat el receptor

decode_results resultats;

void setup () {

Serial.begin (9600); // estableix la velocitat del port COM

irrecv.enableIRIn (); // iniciar la recepció

}

void loop () {

if (irrecv.decode (i resultats)) {// si van arribar les dades

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

irrecv.resume (); // accepta la següent comanda

  }

}

Com a resultat, quan parpellegeu el arduino i comenceu a "brillar" al receptor amb el comandament a distància, veurem la imatge següent al monitor del port sèrie:

Monitor de ports en sèrie

Es tracta de codis que envien botons de forma hexadecimal. Així, podeu esbrinar quin botó del comandament a distància que envia el codi, per tant, no hi ha requisits específics per al control remot que s'utilitza, perquè podeu reconèixer i associar-ne qualsevol. Per cert, es tracta d’una idea per a un projecte d’un comandament a distància universal format, que es venien anteriorment. Però ara a l’era d’Internet, la quantitat de tecnologia controlada d’aquesta manera va disminuint cada any.

I amb aquest codi, podeu reconèixer senyals i gestionar la càrrega:

#inclou "IRremote.h"

IRrecv irrecv (2); // indiqueu la sortida a la qual està connectat el receptor

decode_results resultats;

void setup () {

irrecv.enableIRIn (); // iniciar la recepció

}

void loop () {

if (irrecv.decode (i resultats)) {// si van arribar les dades

switch (results.value) {

estoig 0xFFA857:

digitalWrite (13, HIGH);

trencar;

cas 0xFFE01F:

digitalWrite (13, BAIX);

trencar;

    }   

irrecv.resume (); // accepta la següent comanda

  }

}

El principal element del codi és el reconeixement a través de la funció Switch, de vegades s'anomenen "switchcase". És un analògic de les branques if, però té una forma més bella de percepció. Cas: aquestes són les opcions, "si arriba un codi, llavors ..." El codi controla 13 pins per a certs senyals. Permet-me recordar que el LED integrat a la placa ARDUINO està connectat al pin 13, és a dir. l’autor del codi controlava el LED.

Podeu controlar qualsevol cosa mitjançant un pin digital alt o baix mitjançant un transistor de potència (que ja vam incloure en dos articles anteriorment aquí i aquí) amb una càrrega de corrent directe, o mitjançant un triac i un controlador per a ell amb càrrega de corrent directe, també podeu utilitzar relés i contactors, en general, un camp sencer per a la imaginació.


Recepció i transmissió del senyal de ràdio

Per al seu ús amb microcontroladors, els transmissors amb freqüències de funcionament de 433 MHz o 315 MHz són habituals, pot haver-hi altres freqüències, segons la placa específica, però aquestes són les més habituals. El sistema consta de dos nodes: un receptor i un transmissor, la qual cosa és lògic.

Recepció i transmissió del senyal de ràdio

A la imatge, el transmissor es mostra a la part superior dreta i el receptor a la part inferior esquerra. El seu nom per a la cerca: Mòdul de ràdio 433MHz, MX-05V / XD-RF-5V (receptor i transmissor).

La pinça, com passa sovint en els mòduls, està pintada a la pissarra, com l'emissor:

Emissor de ràdio

El receptor no és tan evident, ja que les dades de la placa de circuit imprès s’escriuen sobre dos pins, de fet un d’ells no s’utilitza.

Receptor de ràdio

Per exemple, donem un esquema i un codi per encendre el LED d’una placa Arduino connectada a una altra placa similar, sense cables. El receptor i el transmissor estan connectats de la mateixa manera a les dues plaques:

El receptor i el transmissor de les juntes

Dispositiu

Mòdul

Pins Arduino

Receptor

Vcc

GND

DADES

+ 5V

GND

2

Emissor

Vcc

GND

DADES

+ 5V

GND

2 

A continuació, heu de connectar la biblioteca RCswitch.h a l’ID Arduino

Per començar, escrivim el programa emissor:

#incloure

RCSwitch mySwitch = RCSwitch(); // crear un objecte per treballar amb el front-end

void setup () {

    mySwitch.enableTransmit(2); // digueu al programa al qual està connectat el canal d'informació

}

void loop () {

mySwitch.send (B0100,4);

retard (1000);

mySwitch.send (B1000, 4);

    retard (1000);

} 

El transmissor pot transmetre codi binari, però els seus valors es poden escriure de forma decimal.

mySwitch.send (B0100,4);

i

mySwitch.send (B1000, 4);

es tracta de les ordres de transferència, mySwitch és el nom del transmissor que vam indicar al començament del codi, i l'envia és la comanda de transferència. Els arguments per a aquesta funció són:

Nom del transmissor.send (valor, mida del paquet de polsos enviats a l’aire);

B1000 - el símbol B - significa binari, es podria escriure com el número 8, és a dir. en notació decimal. Una altra opció era escriure “1000” com a cadena (entre cometes).

A continuació, escrivim el codi del receptor (apareix a la placa a la qual està connectat el receptor):

#incloure

RCSwitch mySwitch = RCSwitch ();

void setup () {

pinMode (3, OUTPUT);

mySwitch.enableReceive (0);

}

void loop () {

if (mySwitch.available ()) {

valor int = mySwitch.getReceivedValue ();

if (valor == B1000)

digitalWrite (3, HIGH);

Altrament si (valor == B0100)

digitalWrite (3, BAIX);

mySwitch.resetAvailable ();

    }

}

Aquí declarem que el valor acceptat s’emmagatzema a la variable Valor a la cadena mySwitch.getReceivedValue (). I el fet que el receptor estigui connectat al 2n pin es descriu aquí per mySwiitch.enableReceive (0).

La resta del codi és elemental, si es rep el senyal 0100, el pin número 3 s’estableix a alt (log. Unitat), i si 1000, llavors a baix (log. Zero).

Interessant:

A la línia mySwitch.enableTransmit (0) diem al programa que el receptor està connectat al 2n pin i que el mode de recepció està activat. Els més atents van notar que l’argument d’aquest mètode no és el número de pin “2”, sinó “0”, el cert és que el mètode enableTransmit (número) no accepta el número de pin, sinó el número d’interrupció, sinó en atmega328, que es posa Arduino Uno, nano, promini i diversos altres, al segon passador (pin PortD PD2) es penja una interrupció amb el número zero. Podeu veure-ho al pinzell d’Atmega aplicable al tauler d’Arduino, els números del pin s’escriuen en quadres rosats.

Pintura atmega

Aquest mètode de transmissió i recepció és molt senzill i barat; un parell de receptor i emissor costa uns 1,5 dòlars en el moment d’escriure.


Wi-Fi, Adruino i ESP8266

Per començar, ESP8266 és un microcontrolador amb suport de maquinari per a wifi, Es ven com un xip separat, i es solda al tauler, com un arduino. Té un nucli de 32 bits, està programat mitjançant un port sèrie (UART).

Les plaques solen tenir 2 o més pins GPIO gratuïts i sempre hi ha pins per al firmware, això s'ha de fer a través d'un adaptador de sèrie a USB. Gestionat per equips d’AT, es pot trobar una llista completa d’ordres al lloc web oficial d’ESP2626 i a github.

ESP8266

Hi ha una opció més interessant, les plaques NodeMCU, que tenen la possibilitat de parpellejar mitjançant USB, ja que Ja hi ha un convertidor USB-UART al tauler, generalment fabricat en un xip CP2102. Node MCU és un firmware, com un sistema operatiu, un projecte basat en el llenguatge d'escriptura Lua.

Junta NodeMCU

El firmware pot executar scripts Lua, ja sigui acceptant-los en un port sèrie o reproduint algoritmes emmagatzemats a la memòria Flash.

Per cert, té el seu propi sistema d’arxius, tot i que no hi ha directoris, és a dir. només fitxers sense carpetes. A la memòria, no només es poden emmagatzemar scripts, sinó també diverses dades, és a dir. la pissarra pot emmagatzemar informació enregistrada, per exemple, a partir de sensors.

La placa funciona amb interfícies:

  • 1-filferro;

  • I2C;

  • SPI

  • UART

Té tota una sèrie de funcions:

  • mòdul de xifrat;

  • programador de tasques;

  • rellotge en temps real;

  • protocol de sincronització de rellotge mitjançant Internet SNTP;

  • temporitzadors;

  • Canal ADC (un);

  • reproduir fitxers d’àudio;

  • generar a les sortides un senyal PWM (fins a 6);

  • utilitzeu sockets, hi ha suport per a FatFS, és a dir, podeu connectar targetes SD i així successivament.

ESP-12E

I aquí teniu una llista breu del que pot treballar el consell:

  • acceleròmetres ADXL345;

  • Magnetòmetres HMC5883L

  • giroscopis L3G4200D;

  • Sensors de temperatura i humitat AM2320, DHT11, DHT21, DHT22, DHT33, DHT44;

  • sensors de temperatura, humitat, pressió atmosfèrica BME280;

  • sensors de temperatura i pressió atmosfèrica BMP085;

  • moltes pantalles treballant amb I2C, autobusos SPI. Amb la capacitat de treballar amb diferents tipus de lletra;

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

  • LEDs intel·ligents i controladors LED - WS2812, tm1829, WS2801, WS2812.

A més d’utilitzar l’idioma Lua, podeu programar el tauler des de l’IDE ​​Arduino.

ESP8266 es pot utilitzar com a dispositiu autònom o com a mòdul per a la comunicació sense fils amb Arduino.

Mòdul de comunicació sense fils amb Arduino

En consideració de totes les funcions i funcions d'aquest consell, s'utilitzaran tota una sèrie d'articles.

Així que aquesta pissarra és una opció ideal per a control remot mitjançant Wi-Fi. L’abast és enorme, per exemple, per utilitzar un telèfon intel·ligent com a tauler de control per a una màquina o quadrocòpter controlat per ràdio, control d’il·luminació a distància, fins a organitzar xarxes per a tota la casa i gestionar cada presa, llum, etc. si només hi hagués prou pins.

La manera més senzilla de treballar amb el microcontrolador és utilitzar una sola placa ESP8266. A continuació es mostra un esquema d'una presa de wi-fi senzilla.

Esquema de la presa de wifi més simple

Per muntar aquest circuit, necessiteu un mòdul de relé o un relé convencional connectat a un passador mitjançant un transistor. Primer necessita un programa per a un telèfon intel·ligent RoboRemoFree ,. En ella, configurarà la connexió a l’ESP i crearàs una interfície per controlar la presa de sortida. Per descriure com utilitzar-lo, heu d'escriure un article a part, per tant, ometem aquest material de moment.

A ESP carreguem el següent firmware mitjançant el programa ESPlorer (programa per treballar amb la pissarra)

- Configuració d'aplicacions Wifi

wifi.setmode (wifi.STATIONAP)

cfg = {}

cfg.ssid = "ESPTEST"

cfg.pwd = "1234567890"

wifi.ap.config (cfg)

--Set mode 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 funcions (sck, dades)

si string.sub (dades, 0, 1) == "1" llavors

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

gpio.write (my_pin_nummber, gpio.LOW)

més

si string.sub (dades, 0, 1) == "0" llavors

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

gpio.write (my_pin_nummber, gpio.HIGH)

final

final

imprimir (dades)

final

si sv llavors

sv: escoltar (333, funció (conn))

conn: on ("rebre", receptor)

conn: send ("Hola!")

final)

final

--Crear servidor HTTP

http = net.createServer (net.TCP)

funció rebre_http (sck, dades)

imprimir (dades)

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

si sol·liciteu == "GET / on HTTP / 1.1"

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

gpio.write (my_pin_nummber, gpio.LOW)

final

si sol·liciteu == "GET / off HTTP / 1.1"

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

gpio.write (my_pin_nummber, gpio.HIGH)

final

sck: on ("enviat", funció (sck) sck: close () collectgarbage () final)

local response = "HTTP / 1.0 200 OK \ r \ nServer: NodeMCU a ESP8266 \ r \ nContent-Type: text / html \ r \ n \ r \ n" ..

" NodeMCU a ESP8266 " ..

"

NodeMCU a ESP8266

" ..

"


" ..

" Activat Desactivat " ..

" "

sck: enviar (resposta)

final

si http llavors

http: escolta (80, funció (conn))

conn: on ("rebre", rebre_http)

final)

final

print ("Inici".)

Ara podeu controlar el programa des del programa Roboremo o a través de qualsevol navegador web, per a això heu d'escriure l'adreça IP del tauler a la barra d'adreces al mode wi-fi. 192.168.4.1.

Hi ha un fragment al codi:

" NodeMCU a ESP8266 " ..

"

NodeMCU a ESP8266

" ..

"


" ..

" Activat Desactivat " ..

" "

Es tracta d’un tipus de resposta que s’emet al navegador en accedir al tauler. Conté codi HTML, és a dir. La pàgina web més simple, similar a la que esteu llegint aquest article.

Pàgina del navegador del telèfon intel·ligent amb sistema operatiu Android

Aquí teniu aquesta pàgina, llançada al navegador d’un telèfon intel·ligent que funciona amb Android OS. L'anterior no és una instrucció completa, ja que es requereix una quantitat enorme, si us interessa aquesta informació: escriviu comentaris i definitivament realitzarem una revisió i escrivim un article sobre com treballar-hi.

Consulteu també a electro-ca.tomathouse.com:

  • Connexió i programació d’Arduino per a principiants
  • Mètodes per llegir i gestionar els ports d'E / S Arduino
  • Què són les pantalles de Nextion i com treballar amb elles?
  • Microcontroladors programables en JavaScript: quin triar, característiques ...
  • Tipus i ordenació de microcontroladors AVR

  •