categorii: Automatizari la domiciliu, Circuite de micro-controler
Număr de vizualizări: 17351
Comentarii la articol: 0

Telecomandă cu microcontroler: Telecomandă IR, Arduino, ESP8266, 433 MHz

 

Problema controlului de la distanță sau de la distanță a echipamentelor electrice a fost întotdeauna și va fi relevantă, indiferent dacă există sau nu instrumente de automatizare în sistem. Pentru organizarea telecomenzii, nu contează deloc dacă microcontroler, totul depinde de funcțiile necesare alocate dispozitivului gestionat. În acest articol, veți afla informații generale despre cum puteți controla de la distanță un microcontroler.

Telecomanda cu microcontroler

tipuri

Există două tipuri principale de comunicații la distanță:


cu fir. Când controlul actuatoarelor amplasate într-o cameră (sau nu în cameră) se realizează de la panoul de control sau de la un stâlp buton situat într-un alt loc. În acest caz, este prevăzută o conexiune electrică a circuitelor de control și a actuatoarelor (relee, contactori, care includ mecanisme, cum ar fi motoare sau sisteme, de exemplu, iluminare).


fără fir. În această realizare, nu este necesară conexiunea electrică a circuitelor de comandă și de execuție. În circuitele wireless, există două dispozitive: un emițător sau o telecomandă (RC) și un receptor, care face parte din circuitul controlat. Controlul wireless, la rândul său, este comun în două versiuni:

  • Prin semnal optic. Astfel de sisteme sunt în fiecare casă, deci controlați funcționarea televizorului, a aerului condiționat și a altor aparate electrocasnice.

  • Prin semnal radio. Există deja o serie de opțiuni: Bluetooth, ZigBee, Wi-Fi, receptoare-transmițător de 433 MHz și alte variante pe acest subiect.

Este demn de remarcat faptul că, cu mijloace tehnice moderne, puteți controla microcontrolerul, atât de la telecomandă, cât și prin Internet, pe o rețea locală sau cu acces din orice parte a lumii.



Telecomanda IR

Începem considerația cu cea mai simplă și clasică versiune. Controlul dispozitivului prin transmiterea unui cod din secvența de licărire a LED-ului IR către receptorul optic instalat pe dispozitiv. Este demn de remarcat faptul că spectrul infraroșu nu este vizibil pentru ochiul uman, dar majoritatea camerelor foto și video îl văd.

Deoarece majoritatea camerelor văd infraroșu, puteți verifica serviceabilitatea telecomenzilor. Pentru a face acest lucru, pur și simplu îndreptați telecomanda astfel încât emițătorul să se uite în cameră și să apăsați butoanele. De obicei, pe ecran este vizibilă o strălucire albă cu o nuanță de violet.

Acest control are un dezavantaj evident - trebuie să îndrepți telecomanda spre receptor. Și dacă bateriile de la telecomandă sunt epuizate, atunci trebuie, de asemenea, să țintești, deoarece operațiunile sunt din ce în ce mai puține.

Avantajele sunt simplitatea, întreținerea ridicată, atât a transmițătorului, cât și a receptorului. Puteți găsi detaliile prin demontarea telecomenzilor și televizoarelor sparte pentru a aplica acest lucru în propriile proiecte.

Un senzor tipic este după cum urmează. Deoarece se primește semnalul optic, este necesar să se excludă declanșarea de la surse externe de lumină, cum ar fi soarele, lămpile de iluminat și altele. De remarcat, de asemenea, că semnalul infraroșu este primit în principal la o frecvență de 38 kHz.

Senzor IR

Iată specificațiile unuia dintre senzorii IR:

  • frecvența purtătorului: 38 kHz;

  • tensiune de alimentare: 2,7 - 5,5 V;

  • consum curent: 50 μA.

Și diagrama conexiunii sale:

Schema de conectare a senzorului IR

Telecomanda poate fi utilizată de oricine are un principiu similar de funcționare, telecomandele de la:

  • televizoare;

  • DVD playere

  • magnetofoane;

  • de la dispozitive moderne de iluminat, cum ar fi candelabre inteligente și benzi LED și multe altele.

Panoul de control

Iată un exemplu de utilizare a unui astfel de senzor cu Arduino

Exemplu de senzor IR Arduino

Pentru ca microcontrolerul, în cazul nostru Arduin, să înțeleagă semnalul de la senzor, trebuie să utilizați biblioteca IRremote.h. Pentru un exemplu de citire a unui semnal de la un senzor, vom oferi un cod pentru a le recunoaște citind portul serial al microcontrolerului din IDE Arduino:

#include "IRremote.h" // conectați biblioteca pentru a funcționa cu semnalul IR.

IRrecv irrecv (2); // indicați ieșirea la care este conectat receptorul

rezultate decode_results;

void setup () {

Serial.begin (9600); // setați viteza portului COM

irrecv.enableIRIn (); // începe recepția

}

void loop () {

if (irrecv.decode (& rezultate)) {// dacă au venit datele

Serial.println (results.value, HEX); // imprima date

irrecv.resume (); // acceptă următoarea comandă

  }

}

Drept urmare, când blițează arduino-ul și începe să „strălucească” în receptor cu ajutorul telecomenzii, vom vedea următoarea imagine în monitorul portului serial:

Monitor de port serial

Acestea sunt coduri care trimit butoane în formă hexadecimală. Astfel, puteți afla ce buton de pe telecomandă pe care îl trimite codul, prin urmare nu există cerințe specifice pentru telecomanda folosită, deoarece puteți recunoaște și asocia orice. Apropo, aceasta este o idee pentru un proiect al unei telecomenzi universale instruite, care au fost vândute mai devreme. Însă acum în era Internetului, cantitatea de tehnologie controlată în acest fel scade în fiecare an.

Și cu acest cod, puteți recunoaște semnalele și gestiona încărcarea:

#includeți „IRremote.h”

IRrecv irrecv (2); // indicați ieșirea la care este conectat receptorul

rezultate decode_results;

void setup () {

irrecv.enableIRIn (); // începe recepția

}

void loop () {

if (irrecv.decode (& rezultate)) {// dacă au venit datele

switch (results.value) {

carcasa 0xFFA857:

digitalWrite (13, HIGH);

pauză;

cazul 0xFFE01F:

digitalWrite (13, LOW);

pauză;

    }   

irrecv.resume (); // acceptă următoarea comandă

  }

}

Principalul lucru din cod este recunoașterea prin funcția de comutare, uneori sunt numite „tablou”. Este un analog al ramurilor if, dar are o formă mai frumoasă de percepție. Caz - acestea sunt opțiunile, „dacă ajunge un astfel de cod, atunci…” Codul controlează 13 pini pentru anumite semnale. Permiteți-mi să vă reamintesc că LED-ul încorporat de pe placa ARDUINO este conectat la pinul 13, adică. autorul codului a controlat LED-ul.

Puteți controla orice folosind un pin digital înalt sau mic printr-un tranzistor de putere (pe care l-am acoperit în două articole mai devreme aici și aici) cu o sarcină de curent continuu, sau printr-un triac și un driver pentru acesta cu o sarcină de curent continuu, puteți utiliza, de asemenea, relee și contactori, în general, un întreg câmp pentru imaginație.


Recepție și transmisie semnal radio

Pentru utilizarea cu microcontrolere, transmitatoarele cu frecvențe de funcționare de 433 MHz sau 315 MHz sunt comune, pot exista și alte frecvențe, în funcție de placa specifică, dar acestea sunt cele mai frecvente. Sistemul este format din două noduri - un receptor și un transmițător, ceea ce este logic.

Recepție și transmisie semnal radio

În imagine, emițătorul este afișat în dreapta sus, iar receptorul în partea stângă jos. Numele lor pentru căutare: Modul radio 433MHz, MX-05V / XD-RF-5V (receptor și transmițător).

Pinota, așa cum se întâmplă adesea în module, este vopsită pe placă, la fel ca transmițătorul:

Transmițător radio

Receptorul nu este atât de evident, deoarece Datele de pe placa de circuit imprimat sunt scrise pe doi pini, de fapt unul dintre ei nu este folosit.

Receptor radio

De exemplu, oferim o diagramă și un cod pentru pornirea LED-ului de pe o placă Arduino conectată la o altă placă similară, fără fire. Receptorul și emițătorul sunt conectați în același mod la ambele plăci:

Receptorul și emițătorul de pe plăci

dispozitiv

modul

Pinii Arduino

receptor

VCC

GND

DATE

+ 5V

GND

2

transmițător

VCC

GND

DATE

+ 5V

GND

2 

În continuare, trebuie să conectați biblioteca RCswitch.h la IDE Arduino

Pentru a începe, scriem programul emițător:

#include

RCSwitch mySwitch = RCSwitch(); // creați un obiect care să funcționeze cu front-end

void setup () {

    mySwitch.enableTransmit(2); // spuneți programului cu care este conectat canalul de informații

}

void loop () {

mySwitch.send (B0100,4);

întârziere (1000);

mySwitch.send (B1000, 4);

    întârziere (1000);

} 

Transmițătorul poate transmite cod binar, dar valorile sale pot fi scrise în formă zecimală.

mySwitch.send (B0100,4);

și

mySwitch.send (B1000, 4);

acestea sunt comenzile de transfer, mySwitch este numele emițătorului pe care l-am indicat la începutul codului, iar trimiterea este comanda de transfer. Argumentele pentru această funcție sunt:

Transmitter name.send (valoare, dimensiunea pachetului de impulsuri trimise în aer);

B1000 - simbolul B - înseamnă binar, ar putea fi scris ca numărul 8, adică. în notație zecimală. O altă opțiune a fost să scrieți „1000” ca șir (în ghilimele).

În continuare, scriem codul pentru receptor (acesta este aprins în placa la care este conectat receptorul):

#include

RCSwitch mySwitch = RCSwitch ();

void setup () {

pinMode (3, OUTPUT);

mySwitch.enableReceive (0);

}

void loop () {

if (mySwitch.available ()) {

valoarea int = mySwitch.getReceivedValue ();

if (valoare == B1000)

digitalWrite (3, HIGH);

altfel dacă (valoare == B0100)

digitalWrite (3, LOW);

mySwitch.resetAvailable ();

    }

}

Aici declarăm că valoarea acceptată este stocată în variabila Value din șirul mySwitch.getReceivedValue (). Iar faptul că receptorul este conectat la al doilea pin este descris aici de mySwiitch.enableReceive (0).

Restul codului este elementar, dacă se primește semnalul 0100, numărul pin 3 este setat la mare (unitatea log.), Iar dacă 1000, apoi la scăzut (log. Zero).

I mirare:

În linia mySwitch.enableTransmit (0) spunem programului că receptorul este conectat la al doilea pin și modul de recepție este pornit. Cei mai atenți au observat că argumentul acestei metode nu este numărul de pin „2”, ci „0”, fapt este că metoda enableTransmit (numărul) nu acceptă numărul de pin, ci numărul de întrerupere, ci în atmega328, care este pus pe Arduino Uno, nano, promini și alți câțiva alții, pe al doilea pin (PortD pin PD2) se blochează o întrerupere cu numărul zero. Puteți vedea acest lucru în pinul Atmega aplicabil tabloului Arduino, numerele pinului sunt scrise în cutii roz.

Atmega pinout

Această metodă de transmitere și recepție este foarte simplă și ieftină, o pereche de receptor și emițător costă aproximativ 1,5 USD la momentul scrierii.


Wi-Fi, Adruino și ESP8266

Pentru început, ESP8266 este un microcontroller cu suport hardware pentru Wi-Fi, Acesta este vândut ca un cip separat, și lipit pe placă, ca un arduino. Are un nucleu pe 32 de biți, este programat printr-un port serial (UART).

Plăcile au de obicei 2 sau mai multe pini GPIO gratuite și există întotdeauna pini pentru firmware, acest lucru trebuie făcut printr-un adaptor USB la serial. Gestionată de echipele AT, o listă completă de comenzi poate fi găsită pe site-ul oficial al ESP8266 și pe github.

ESP8266

Există o opțiune mai interesantă, plăcile NodeMCU, acestea au posibilitatea de a clipi prin USB, deoarece Un convertor USB-UART este deja pe placă, de obicei realizat pe un cip CP2102. Node MCU este un firmware, ceva precum un sistem de operare, un proiect bazat pe limbajul de script Lua.

NodeMCU Board

Firmware-ul poate executa scripturi Lua, fie prin acceptarea lor într-un port serial sau prin reproducerea algoritmilor stocați în memoria Flash.

Apropo, are propriul sistem de fișiere, deși nu există directoare în el, adică. numai fișiere fără foldere. În memorie, nu numai scripturile pot fi stocate, ci și diverse date, adică. placa poate stoca informații înregistrate, de exemplu, de la senzori.

Placa funcționează cu interfețe:

  • 1-Wire;

  • I2C;

  • SPI;

  • UART.

Are o serie întreagă de funcții:

  • modul de criptare;

  • planificator sarcini;

  • ceas în timp real;

  • Protocol de sincronizare a ceasului prin Internet SNTP;

  • cronometre;

  • Canal ADC (unul);

  • redare fișiere audio;

  • generați la ieșiri un semnal PWM (până la 6);

  • utilizați socluri, există suport pentru FatFS, adică puteți conecta carduri SD ș.a.

ESP-12E

Și aici este o listă scurtă cu ce poate lucra bordul:

  • accelerometre ADXL345;

  • Magnetometre HMC5883L

  • giroscopuri L3G4200D;

  • senzori de temperatură și umiditate AM2320, DHT11, DHT21, DHT22, DHT33, DHT44;

  • senzori de temperatură, umiditate, presiune atmosferică BME280;

  • senzori de temperatură și presiune atmosferică BMP085;

  • multe afișaje care lucrează la autobuzele I2C, SPI. Cu capacitatea de a lucra cu diferite fonturi;

  • Afișaje TFT ILI9163, ILI9341, PCF8833, SEPS225, SSD1331, SSD1351, ST7735;

  • LED-uri inteligente și controlere LED - WS2812, tm1829, WS2801, WS2812.

Pe lângă utilizarea limbii Lua, puteți programa placa de sub IDE Arduino.

ESP8266 poate fi utilizat ca dispozitiv autonom sau ca modul pentru comunicarea fără fir cu Arduino.

Modul pentru comunicare wireless cu Arduino

Luarea în considerare a tuturor funcțiilor și caracteristicilor acestui consiliu va avea o serie întreagă de articole.

Deci, această placă este o opțiune excelentă pentru telecomanda prin Wi-Fi. Domeniul de aplicare este enorm, de exemplu, de a utiliza un smartphone ca panou de control pentru o mașină sau quadrocopter cu control radio radio, telecomandă, până la aranjarea rețelelor pentru întreaga casă și gestionarea fiecărei priză, lampă etc. dacă numai erau destui ace.

Cel mai simplu mod de a lucra cu microcontrolerul este să utilizați o singură placă ESP8266. Mai jos este prezentată o diagramă a unei ieșiri wi-fi simple.

Schema celei mai simple prize wifi

Pentru a asambla acest circuit, aveți nevoie de un modul releu sau un releu convențional conectat la un pin printr-un tranzistor. Mai întâi aveți nevoie de un program pentru un smartphone RoboRemoFree ,. În el, veți configura conexiunea la ESP și veți face o interfață pentru controlul prizei. Pentru a descrie cum să-l utilizați, trebuie să scrieți un articol separat, așadar să omitem acest material deocamdată.

În ESP încărcăm următorul firmware, prin programul ESPlorer (program pentru lucrul cu placa)

- Setare AP Wifi

wifi.setmode (wifi.STATIONAP)

cfg = {}

cfg.ssid = "ESPTEST"

cfg.pwd = "1234567890"

wifi.ap.config (cfg)

- Mod Setare Pin

my_pin_nummber = 1

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

gpio.mode (my_pin_nummber, gpio.OPENDRAIN)

- Server Creare

sv = net.createServer (net.TCP)

receptor de funcții (sck, date)

if string.sub (date, 0, 1) == "1" atunci

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

gpio.write (my_pin_nummber, gpio.LOW)

altfel

if string.sub (date, 0, 1) == "0" atunci

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

gpio.write (my_pin_nummber, gpio.HIGH)

capăt

capăt

tipărire (date)

capăt

dacă sv atunci

sv: asculta (333, funcție (conn))

conn: on („primi”, receptor)

conn: send ("Hello!")

end)

capăt

- Creare server HTTP

http = net.createServer (net.TCP)

funcție recepție_http (sck, date)

tipărire (date)

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

dacă cerere == 'GET / pe HTTP / 1.1' atunci

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

gpio.write (my_pin_nummber, gpio.LOW)

extremitate

dacă cerere == 'GET / off HTTP / 1.1' atunci

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

gpio.write (my_pin_nummber, gpio.HIGH)

capăt

sck: on ("trimis", funcție (sck) sck: close () collectgarbage () end)

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

" NodeMCU pe ESP8266 " ..

"

NodeMCU pe ESP8266

" ..

"


" ..

" On Oprit " ..

" "

sck: trimite (răspuns)

capăt

dacă http atunci

http: asculta (80, funcție (con)

conn: on ("primi", primește_http)

end)

capăt

print („Început.”)

Acum puteți controla programul fie din programul Roboremo, fie prin orice browser web, pentru aceasta trebuie să introduceți adresa IP a plăcii în bara de adrese în modul wi-fi, 192.168.4.1.

În cod există un fragment:

" NodeMCU pe ESP8266 " ..

"

NodeMCU pe ESP8266

" ..

"


" ..

" On Oprit " ..

" "

Acesta este un fel de răspuns care este emis către browser atunci când accesați placa. Conține cod HTML, adică Cea mai simplă pagină web, similară cu cea pe care citiți acest articol.

Pagina din browserul smartphone-ului care rulează sistem de operare Android

Iată această pagină, lansată în browserul unui smartphone care rulează sistem de operare Android. Cele de mai sus nu sunt o instrucțiune completă, deoarece ar fi nevoie de o sumă imensă, dacă sunteți interesat de aceste informații - scrieți comentarii și cu siguranță vom efectua o recenzie și vom scrie un articol despre lucrul cu aceasta.

Consultați și la i.electricianexp.com:

  • Conectarea și programarea Arduino pentru începători
  • Metode de citire și gestionare a porturilor I / O Arduino
  • Ce sunt afișările Nextion și cum să lucrați cu ele?
  • Microcontrolere programabile în JavaScript: care dintre ele să aleagă, caracteristici ...
  • Tipuri și aranjament de microcontrolere AVR

  •