categorie: Domotica, Circuiti a microcontrollore
Numero di visite: 17351
Commenti sull'articolo: 0

Telecomando a microcontrollore: telecomando IR, Arduino, ESP8266, 433 MHz

 

Il problema del controllo remoto o remoto delle apparecchiature elettriche è sempre stato e sarà rilevante, indipendentemente dal fatto che ci siano o meno strumenti di automazione nel sistema. Per l'organizzazione del controllo remoto non importa se microcontrollore, tutto dipende dalle funzioni necessarie assegnate al dispositivo gestito. In questo articolo imparerai informazioni generali su come controllare a distanza un microcontrollore.

Telecomando a microcontrollore

tipi

Esistono due tipi principali di comunicazione remota:


wired. Quando il controllo degli attuatori situati in una stanza (o meno nella stanza) viene effettuato dal pannello di controllo o da un pulsante posto in un altro posto. In questo caso, viene fornito un collegamento del filo elettrico dei circuiti di controllo e degli attuatori (relè, contattori, che includono meccanismi, come motori o sistemi, ad esempio l'illuminazione).


senza fili. In questa forma di realizzazione, non è richiesto alcun collegamento elettrico dei circuiti di controllo ed esecutivo. Nei circuiti wireless, ci sono due dispositivi: un trasmettitore o un telecomando (RC) e un ricevitore, che fa parte del circuito controllato. Il controllo wireless, a sua volta, è comune in due versioni:

  • Tramite segnale ottico. Tali sistemi sono presenti in ogni casa, quindi puoi controllare il funzionamento della TV, dell'aria condizionata e di altri elettrodomestici.

  • Tramite segnale radio. Esistono già diverse opzioni: Bluetooth, ZigBee, Wi-Fi, trasmettitore-ricevitore a 433 MHz e altre variazioni su questo argomento.

Vale la pena notare che con i moderni mezzi tecnici è possibile controllare il microcontrollore, sia dal telecomando che attraverso Internet su una rete locale o con accesso da qualsiasi parte del mondo.



Telecomando IR

Iniziamo la nostra considerazione con la versione più semplice e classica. Controllo del dispositivo trasmettendo un codice dalla sequenza di sfarfallio del LED IR al ricevitore ottico installato sul dispositivo. Vale la pena notare che lo spettro infrarosso non è visibile all'occhio umano, ma la maggior parte delle foto e delle videocamere lo vede.

Poiché la maggior parte delle telecamere vede l'infrarosso, è possibile verificare manutenzione dei telecomandi. Per fare ciò, è sufficiente puntare il telecomando in modo che l'emettitore guardi nella telecamera e premere i pulsanti. Di solito, sullo schermo è visibile una luce bianca con una sfumatura viola.

Questo controllo ha un evidente svantaggio: è necessario puntare il telecomando verso il ricevitore. E se le batterie del telecomando si esauriscono, allora devi anche mirare, poiché le operazioni stanno diventando sempre meno.

I vantaggi sono la semplicità, l'elevata manutenibilità, sia del trasmettitore che del ricevitore. Puoi trovare i dettagli smantellando i telecomandi rotti e i televisori per applicarli nei tuoi progetti.

Un sensore tipico è il seguente. Poiché viene ricevuto il segnale ottico, è necessario escludere l'attivazione da fonti di luce estranee, come il sole, le lampade di illuminazione e altre. Vale anche la pena notare che il segnale a infrarossi viene ricevuto principalmente a una frequenza di 38 kHz.

Sensore IR

Ecco le specifiche di uno dei sensori IR:

  • frequenza portante: 38 kHz;

  • tensione di alimentazione: 2,7 - 5,5 V;

  • consumo di corrente: 50 μA.

E il suo diagramma di connessione:

Schema di collegamento del sensore IR

Il telecomando può essere utilizzato da chiunque abbia un principio di funzionamento simile, i telecomandi di:

  • televisori;

  • Lettori DVD

  • registratori a nastro radio;

  • dai moderni dispositivi di illuminazione, come lampadari intelligenti e strisce LED e altro ancora.

Pannello di controllo

Ecco un esempio dell'uso di un tale sensore con Arduino

Esempio di sensore IR Arduino

Affinché il microcontrollore, nel nostro caso Arduin, capisca il segnale dal sensore, è necessario utilizzare la libreria IRremote.h. Per un esempio di come leggere un segnale da un sensore, daremo un codice per riconoscerlo leggendo la porta seriale del microcontrollore dall'IDE di Arduino:

#include "IRremote.h" // collega la libreria per lavorare con il segnale IR.

IRrecv irrecv (2); // indica l'uscita a cui è collegato il ricevitore

risultati decode_results;

void setup () {

Serial.begin (9600); // imposta la velocità della porta COM

irrecv.enableIRIn (); // avvia la ricezione

}

void loop () {

if (irrecv.decode (& results)) {// se i dati sono arrivati

Serial.println (results.value, HEX); // stampa i dati

irrecv.resume (); // accetta il seguente comando

  }

}

Di conseguenza, quando si esegue il flashing dell'arduino e si inizia a "brillare" nel ricevitore con il telecomando, vedremo la seguente immagine nel monitor della porta seriale:

Monitor della porta seriale

Questi sono codici che inviano pulsanti in forma esadecimale. Quindi, puoi scoprire quale pulsante sul telecomando quale codice invia, quindi non ci sono requisiti specifici per il telecomando utilizzato, perché puoi riconoscerne e associarne uno qualsiasi. A proposito, questa è un'idea per un progetto di telecomando universale addestrato, che sono stati venduti in precedenza. Ma ora nell'era di Internet, la quantità di tecnologia controllata in questo modo sta diminuendo ogni anno.

E con questo codice, puoi riconoscere i segnali e gestire il carico:

#include "IRremote.h"

IRrecv irrecv (2); // indica l'uscita a cui è collegato il ricevitore

risultati decode_results;

void setup () {

irrecv.enableIRIn (); // avvia la ricezione

}

void loop () {

if (irrecv.decode (& results)) {// se i dati sono arrivati

switch (results.value) {

caso 0xFFA857:

digitalWrite (13, HIGH);

break;

caso 0xFFE01F:

digitalWrite (13, LOW);

break;

    }   

irrecv.resume (); // accetta il seguente comando

  }

}

La cosa principale nel codice è il riconoscimento attraverso la funzione Switch, a volte sono chiamati "switchcase". È un analogo dei rami if, ma ha una forma più bella per la percezione. Caso: queste sono le opzioni "se arriva un codice simile, allora ..." Il codice controlla 13 pin per determinati segnali. Lascia che ti ricordi che il LED incorporato sulla scheda ARDUINO è collegato al pin 13, ad es. l'autore del codice controllava il LED.

Puoi controllare qualsiasi cosa usando un pin digitale alto o basso attraverso un transistor di potenza (che abbiamo trattato in due articoli in precedenza qui e qui) con un carico di corrente continua, o attraverso un triac e un driver per esso con un carico di corrente continua, è anche possibile utilizzare relè e contattori, in generale, un intero campo per l'immaginazione.


Ricezione e trasmissione del segnale radio

Per l'uso con microcontrollori, i trasmettitori con frequenze operative di 433 MHz o 315 MHz sono comuni, potrebbero esserci altre frequenze, a seconda della scheda specifica, ma queste sono le più comuni. Il sistema è costituito da due nodi: un ricevitore e un trasmettitore, che è logico.

Ricezione e trasmissione del segnale radio

Nell'immagine, il trasmettitore è mostrato in alto a destra e il ricevitore in basso a sinistra. Il loro nome per la ricerca: Modulo radio 433 MHz, MX-05V / XD-RF-5V (ricevitore e trasmettitore).

La piedinatura, come spesso accade nei moduli, è dipinta sulla scheda, come il trasmettitore:

Trasmettitore radio

Il ricevitore non è così ovvio, perché i dati sul circuito stampato sono scritti su due pin, infatti uno di questi non viene utilizzato.

Ricevitore radio

Ad esempio, forniamo un diagramma e un codice per accendere il LED da una scheda Arduino collegata a un'altra scheda simile, senza fili. Il ricevitore e il trasmettitore sono collegati allo stesso modo ad entrambe le schede:

Il ricevitore e il trasmettitore sulle schede

dispositivo

modulo

Spilli Arduino

ricevitore

VCC

GND

DATI

+ 5 V.

GND

2

trasmettitore

VCC

GND

DATI

+ 5 V.

GND

2 

Successivamente, è necessario collegare la libreria RCswitch.h all'IDE Arduino

Per iniziare, scriviamo il programma del trasmettitore:

#include

RCSwitch mySwitch = RCSwitch(); // crea un oggetto per lavorare con il front-end

void setup () {

    mySwitch.enableTransmit(2); // indica al programma a quale pin è collegato il canale informativo

}

void loop () {

mySwitch.send (B0100,4);

ritardo (1000);

mySwitch.send (B1000, 4);

    ritardo (1000);

} 

Il trasmettitore può trasmettere codice binario, ma i suoi valori possono essere scritti in forma decimale.

mySwitch.send (B0100,4);

e

mySwitch.send (B1000, 4);

questi sono i comandi di trasferimento, mySwitch è il nome del trasmettitore che abbiamo indicato all'inizio del codice e send è il comando di trasferimento. Gli argomenti per questa funzione sono:

Nome del trasmettitore invio (valore, dimensione del pacchetto di impulsi inviati all'aria);

B1000 - il simbolo B - significa binario, potrebbe essere scritto come il numero 8, cioè in notazione decimale. Un'altra opzione era scrivere "1000" come stringa (tra virgolette).

Successivamente, scriviamo il codice per il ricevitore (viene visualizzato nella scheda a cui è collegato il ricevitore):

#include

RCSwitch mySwitch = RCSwitch ();

void setup () {

pinMode (3, OUTPUT);

mySwitch.enableReceive (0);

}

void loop () {

if (mySwitch.available ()) {

valore int = mySwitch.getReceivedValue ();

if (valore == B1000)

digitalWrite (3, HIGH);

altrimenti if (valore == B0100)

digitalWrite (3, LOW);

mySwitch.resetAvailable ();

    }

}

Qui dichiariamo che il valore accettato è memorizzato nella variabile Value nella stringa mySwitch.getReceivedValue (). E il fatto che il ricevitore sia collegato al secondo pin è descritto qui da mySwiitch.enableReceive (0).

Il resto del codice è elementare, se viene ricevuto il segnale 0100, il pin numero 3 è impostato su alto (log. Unità) e se 1000, quindi su basso (log. Zero).

meraviglia I:

Nella linea mySwitch.enableTransmit (0) diciamo al programma che il ricevitore è collegato al 2 ° pin e che la modalità di ricezione è attivata. I più attenti hanno notato che l'argomento di questo metodo non è il numero pin "2", ma "0", il fatto è che il metodo enableTransmit (numero) non accetta il numero pin, ma il numero di interruzione, ma in atmega328, che viene attivato Arduino Uno, nano, promini e molti altri, sul secondo pin (PortD pin PD2) si blocca un interrupt con il numero zero. Puoi vederlo nella piedinatura Atmega applicabile alla scheda Arduino, i numeri dei pin sono scritti in scatole rosa.

Pinout Atmega

Questo metodo di trasmissione e ricezione è molto semplice ed economico; una coppia di ricevitori e trasmettitori costa circa $ 1,5 al momento della scrittura.


Wi-Fi, Adruino ed ESP8266

Per cominciare, ESP8266 è un microcontrollore con supporto hardware per Wi-Fi, Viene venduto come chip separato e saldato alla scheda, come un arduino. Ha un kernel a 32 bit, è programmato tramite una porta seriale (UART).

Le schede di solito hanno 2 o più pin GPIO gratuiti e ci sono sempre pin per il firmware, questo deve essere fatto tramite un adattatore da USB a seriale. Gestito dai team AT, un elenco completo dei comandi è disponibile sul sito Web ufficiale ESP8266 e su github.

ESP8266

C'è un'opzione più interessante, le schede NodeMCU, perché hanno la capacità di lampeggiare via USB Sulla scheda è già presente un convertitore USB-UART, generalmente realizzato su un chip CP2102. Node MCU è un firmware, qualcosa di simile a un sistema operativo, un progetto basato sul linguaggio di scripting Lua.

Scheda NodeMCU

Il firmware può eseguire gli script Lua, accettandoli su una porta seriale o riproducendo algoritmi memorizzati nella memoria Flash.

A proposito, ha il suo file system, anche se non ci sono directory, ad es. solo file senza cartelle. In memoria, non solo è possibile memorizzare script, ma anche vari dati, ad es. la scheda può memorizzare informazioni registrate, ad esempio, dai sensori.

La scheda funziona con interfacce:

  • 1-Wire;

  • I2C;

  • SPI;

  • UART.

Ha tutta una serie di funzioni:

  • modulo di crittografia;

  • pianificatore di attività;

  • orologio in tempo reale;

  • protocollo di sincronizzazione dell'orologio via Internet SNTP;

  • timer;

  • Canale ADC (uno);

  • riprodurre file audio;

  • generare in uscita un segnale PWM (fino a 6);

  • utilizzare i socket, esiste il supporto per FatFS, ovvero è possibile collegare schede SD e così via.

ESP-12E

Ed ecco un breve elenco di ciò con cui la board può lavorare:

  • accelerometri ADXL345;

  • Magnetometri HMC5883L

  • giroscopi L3G4200D;

  • sensori di temperatura e umidità AM2320, DHT11, DHT21, DHT22, DHT33, DHT44;

  • sensori di temperatura, umidità, pressione atmosferica BME280;

  • sensori di temperatura e pressione atmosferica BMP085;

  • molti display funzionano su I2C, bus SPI. Con la capacità di lavorare con diversi tipi di carattere;

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

  • LED intelligenti e controller LED - WS2812, tm1829, WS2801, WS2812.

Oltre a utilizzare la lingua Lua, è possibile programmare la scheda da IDE Arduino.

ESP8266 può essere utilizzato come dispositivo autonomo o come modulo per la comunicazione wireless con Arduino.

Modulo per comunicazione wireless con Arduino

La considerazione di tutte le funzioni e caratteristiche di questa scheda richiederà un'intera serie di articoli.

Quindi questa scheda è un'ottima opzione per il controllo remoto tramite Wi-Fi. L'ambito di applicazione è enorme, ad esempio, per utilizzare uno smartphone come pannello di controllo per una macchina o un quadricottero radiocomandati di fortuna, controllo remoto dell'illuminazione, fino a organizzare le reti per l'intera casa e gestire ogni presa, lampada, ecc. se solo ci fossero abbastanza perni.

Il modo più semplice di lavorare con il microcontrollore è utilizzare una singola scheda ESP8266. Di seguito è riportato un diagramma di una semplice presa wi-fi.

Schema della presa wifi più semplice

Per assemblare questo circuito, è necessario un modulo relè o un relè convenzionale collegato a un pin attraverso un transistor. Innanzitutto è necessario un programma per uno smartphone RoboRemoFree ,. In esso, configurerai la connessione all'ESP e creerai un'interfaccia per controllare la presa. Per descrivere come usarlo, devi scrivere un articolo separato, quindi per ora omettiamo questo materiale.

In ESP cariciamo il seguente firmware, tramite il programma ESPlorer (programma per lavorare con la scheda)

- Impostazione AP WIFI

wifi.setmode (wifi.STATIONAP)

cfg = {}

cfg.ssid = "ESPTEST"

cfg.pwd = "1234567890"

wifi.ap.config (cfg)

--Impostare la modalità Pin

my_pin_nummber = 1

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

gpio.mode (my_pin_nummber, gpio.OPENDRAIN)

--Crea server

sv = net.createServer (net.TCP)

ricevitore di funzioni (sck, dati)

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

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

gpio.write (my_pin_nummber, gpio.LOW)

altro

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

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

gpio.write (my_pin_nummber, gpio.HIGH)

fine

fine

stampa (dati)

fine

se sv allora

sv: ascolta (333, funzione (conn)

conn: on ("ricevere", ricevitore)

conn: send ("Ciao!")

end)

fine

--Crea server HTTP

http = net.createServer (net.TCP)

funzione receive_http (sck, dati)

stampa (dati)

richiesta locale = string.match (data, "([^ \ r, \ n] *) [\ r, \ n]", 1)

se richiesta == 'OTTIENI / su HTTP / 1.1' allora

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

gpio.write (my_pin_nummber, gpio.LOW)

fine

se richiesta == 'OTTIENI / off HTTP / 1.1' allora

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

gpio.write (my_pin_nummber, gpio.HIGH)

fine

sck: on ("inviato", funzione (sck) sck: close () collectgarbage () end)

risposta locale = "HTTP / 1.0 200 OK \ r \ nServer: NodeMCU su ESP8266 \ r \ nContent-Type: text / html \ r \ n \ r \ n" ..

" NodeMCU su ESP8266 " ..

"

NodeMCU su ESP8266

" ..

"


" ..

" On Off " ..

" "

sck: invia (risposta)

fine

se http allora

http: hear (80, funzione (conn)

conn: on ("ricevi", receive_http)

end)

fine

stampa ("Avviato")

Ora puoi controllare il programma dal programma Roboremo o tramite qualsiasi browser web, per questo devi digitare l'indirizzo IP della scheda nella barra degli indirizzi in modalità punto wi-fi 192.168.4.1.

C'è uno snippet nel codice:

" NodeMCU su ESP8266 " ..

"

NodeMCU su ESP8266

" ..

"


" ..

" On Off " ..

" "

Questo è un tipo di risposta che viene emessa al browser quando si accede alla scheda. Contiene codice HTML, ad es. La pagina web più semplice, simile a quella su cui stai leggendo questo articolo.

La pagina nel browser dello smartphone con sistema operativo Android

Ecco questa pagina, lanciata nel browser di uno smartphone con sistema operativo Android. Quanto sopra non è un'istruzione completa, dal momento che ci vorrebbe una quantità enorme, se sei interessato a queste informazioni - scrivi commenti e condurremo sicuramente una recensione e scriveremo un articolo su come lavorarci.

Vedi anche su electro-it.tomathouse.com:

  • Connessione e programmazione di Arduino per principianti
  • Metodi per la lettura e la gestione delle porte I / O di Arduino
  • Cosa sono i display Nextion e come lavorare con essi?
  • Microcontrollori programmabili in JavaScript: quale scegliere, caratteristiche ...
  • Tipi e disposizione dei microcontrollori AVR

  •