Kategorie: Domácí automatizace, Obvody mikrokontrolérů
Počet zobrazení: 17351
Komentáře k článku: 0

Dálkové ovládání mikrokontroléru: IR dálkové ovládání, Arduino, ESP8266, 433 MHz

 

Otázka dálkového nebo dálkového ovládání elektrického zařízení byla vždy a bude relevantní, bez ohledu na to, zda v systému existují nebo nejsou automatizační nástroje. Pro organizaci dálkového ovládání nezáleží, zda mikrokontrolér, vše záleží na nezbytných funkcích přiřazených spravovanému zařízení. V tomto článku se dozvíte obecné informace o tom, jak dálkově ovládat mikrokontrolér.

Dálkové ovládání mikrokontroléru

Druhy

Existují dva hlavní typy vzdálené komunikace:


Kabelové. Když je ovládání pohonů umístěných v jedné místnosti (nebo nikoli v místnosti) prováděno z ovládacího panelu nebo z knoflíkové tyče umístěné na jiném místě. V tomto případě je zajištěno elektrické připojení řídicích obvodů a akčních členů (relé, stykače, které zahrnují mechanismy, jako jsou například motory nebo systémy, například osvětlení).


Bezdrátové. V tomto provedení není vyžadováno žádné elektrické připojení řídicích a výkonných obvodů. V bezdrátových obvodech existují dvě zařízení: vysílač nebo dálkové ovládání (RC) a přijímač, který je součástí řízeného obvodu. Bezdrátové ovládání je zase běžné ve dvou verzích:

  • Optickým signálem. Tyto systémy jsou v každé domácnosti, takže ovládáte provoz televize, klimatizace a dalších domácích spotřebičů.

  • Rádiovým signálem. Existuje již řada možností: Bluetooth, ZigBee, Wi-Fi, 433 MHz vysílače-přijímače a další variace na toto téma.

Stojí za zmínku, že s moderními technickými prostředky můžete mikrokontrolér ovládat jak z dálkového ovládání, tak prostřednictvím Internetu v místní síti nebo s přístupem odkudkoli na světě.



IR dálkové ovládání

Začínáme zvažovat nejjednodušší a nejtradičnější verzí. Řízení zařízení vysíláním kódu z blikající sekvence IR LED do optického přijímače nainstalovaného v zařízení. Stojí za zmínku, že infračervené spektrum není pro lidské oko viditelné, ale většina fotografických a videokamer to vidí.

Protože většina kamer vidí infračervené záření, můžete zkontrolovat použitelnost dálkových ovladačů. Chcete-li to provést, nasměrujte dálkový ovladač tak, aby se emitor díval do kamery a stiskněte tlačítka. Obvykle je na obrazovce vidět bílá záře s fialovým nádechem.

Tento ovládací prvek má zjevnou nevýhodu - musíte dálkový ovladač namířit na přijímač. A pokud dojde k vybití baterií v dálkovém ovladači, musíte také zamířit, protože operace jsou stále méně.

Výhodou je jednoduchost, vysoká údržba, a to jak vysílač, tak přijímač. Podrobnosti najdete rozebráním rozbitých dálkových ovladačů a televizorů, abyste je mohli použít ve svých vlastních projektech.

Typický senzor je následující. Protože je přijímán optický signál, je nutné vyloučit spouštění z vnějších zdrojů světla, jako je slunce, osvětlovací lampy a další. Za zmínku také stojí, že infračervený signál je přijímán hlavně na frekvenci 38 kHz.

IR senzor

Zde jsou specifikace jednoho z IR senzorů:

  • nosná frekvence: 38 kHz;

  • napájecí napětí: 2,7 - 5,5 V;

  • proudová spotřeba: 50 μA.

A jeho schéma zapojení:

Schéma připojení infračerveného senzoru

Dálkové ovládání může používat kdokoli s podobným principem činnosti, dálkové ovladače z:

  • Televizory

  • DVD přehrávače

  • radiomagnetofony;

  • od moderních osvětlovacích zařízení, jako jsou inteligentní lustry a LED pásky a další.

Ovládací panel

Zde je příklad použití takového senzoru s Arduino

Příklad infračerveného senzoru Arduino

Aby mikrokontrolér, v našem případě Arduin, pochopil signál ze senzoru, musíte použít knihovnu IRremote.h. Příkladem toho, jak číst signál ze senzoru, je zde kód pro jejich rozpoznání čtením sériového portu mikrokontroléru z Arduino IDE:

#include "IRremote.h" // připojte knihovnu pro práci s IR signálem.

IRrecv irrecv (2); // označují výstup, ke kterému je přijímač připojen

výsledky dekódování_výsledků;

neplatné nastavení () {

Serial.egegin (9600); // nastavit rychlost portu COM

irrecv.enableIRIn (); // zahájit příjem

}

void loop () {

if (irrecv.decode (& results)) {// jestliže data přišla

Serial.println (results.value, HEX); // tisknout data

irrecv.resume (); // přijmout následující příkaz

  }

}

Výsledkem je, že když blikáte arduino a začnete „svítit“ do přijímače pomocí dálkového ovladače, uvidíme na monitoru sériového portu následující obrázek:

Monitor sériového portu

Jedná se o kódy, které odesílají tlačítka v hexadecimální podobě. Můžete tak zjistit, které tlačítko na dálkovém ovladači odesílá kód, takže neexistují žádné specifické požadavky na použité dálkové ovládání, protože je můžete libovolně rozpoznat a přiřadit. Mimochodem, je to nápad na projekt vyškoleného univerzálního dálkového ovládání, které bylo prodáno dříve. Ale nyní, ve věku internetu, se množství takto ovládané technologie každým rokem snižuje.

A s tímto kódem můžete rozpoznávat signály a spravovat zatížení:

#include "IRremote.h"

IRrecv irrecv (2); // označují výstup, ke kterému je přijímač připojen

výsledky dekódování_výsledků;

neplatné nastavení () {

irrecv.enableIRIn (); // zahájit příjem

}

void loop () {

if (irrecv.decode (& results)) {// jestliže data přišla

switch (results.value) {

případ 0xFFA857:

digitalWrite (13, HIGH);

rozbít;

pouzdro 0xFFE01F:

digitalWrite (13, LOW);

rozbít;

    }   

irrecv.resume (); // přijmout následující příkaz

  }

}

Hlavní věcí v kódu je rozpoznávání pomocí funkce Switch, někdy se jim říká „switchcase“. Je to analogie větví if, ale má krajší formu vnímání. Případ - to jsou možnosti, „pokud takový kód dorazí, pak ...“ Kód řídí 13 pinů pro určité signály. Dovolte mi připomenout, že vestavěná LED na desce ARDUINO je připojena na pin 13, tzn. autor kódu ovládal LED.

Můžete ovládat cokoli pomocí digitálního kolíku s vysokým nebo nízkým číslem prostřednictvím výkonového tranzistoru (který jsme dříve popsali ve dvou článcích) zde a zde) se zátěží stejnosměrným proudem nebo triakem a ovladačem se zátěží stejnosměrným proudem, můžete také pro představivost použít relé a stykače, obecně celé pole.


Příjem a přenos rádiového signálu

Pro použití s ​​mikrokontroléry jsou běžné vysílače s provozními kmitočty 433 MHz nebo 315 MHz, v závislosti na konkrétní desce mohou existovat i jiné frekvence, ale ty jsou nejběžnější. Systém se skládá ze dvou uzlů - přijímače a vysílače, což je logické.

Příjem a přenos rádiového signálu

Na obrázku je vysílač zobrazen vpravo nahoře a přijímač vlevo dole. Jejich jméno pro hledání: Rádiový modul 433 MHz, MX-05V / XD-RF-5V (přijímač a vysílač).

Pinout, jak je tomu často v modulech, je na desce vymalován jako vysílač:

Rádiový vysílač

Přijímač není tak zřejmý, protože Data na desce plošných spojů jsou zapsána na dvou kolících, ve skutečnosti se jeden z nich nepoužívá.

Rádiový přijímač

Například dáme diagram a kód pro zapnutí LED z jedné desky Arduino připojené k jiné podobné desce, bez vodičů. Přijímač a vysílač jsou připojeny stejným způsobem k oběma deskám:

Přijímač a vysílač na desce

Zařízení

Modul

Arduino kolíky

Přijímač

Vcc

GND

DATA

+ 5V

GND

2

Vysílač

Vcc

GND

DATA

+ 5V

GND

2 

Dále je třeba připojit knihovnu RCswitch.h k Arduino IDE

Nejprve napíšeme program vysílače:

#include

RCSwitch mySwitch = RCSwitch(); // vytvořte objekt, který bude pracovat s front-endem

neplatné nastavení () {

    mySwitch.enableTransmit(2); // řekněte programu, ke kterému je informační kanál připojen

}

void loop () {

mySwitch.send (B0100,4);

zpoždění (1000);

mySwitch.send (B1000, 4);

    zpoždění (1000);

} 

Vysílač může vysílat binární kód, ale jeho hodnoty lze zapsat v desítkové podobě.

mySwitch.send (B0100,4);

a

mySwitch.send (B1000, 4);

jedná se o příkazy pro přenos, mySwitch je jméno vysílače, který jsme označili na začátku kódu, a příkaz send je příkaz pro přenos. Argumenty pro tuto funkci jsou:

Název vysílače.send (hodnota, velikost paketu impulsů odeslaných do vzduchu);

B1000 - symbol B - znamená binární, mohl by být zapsán jako číslo 8, tj. v desítkové notaci. Další možností bylo napsat „1000“ jako řetězec (v uvozovkách).

Dále zapíšeme kód pro přijímač (bliká na desce, ke které je přijímač připojen):

#include

RCSwitch mySwitch = RCSwitch ();

neplatné nastavení () {

pinMode (3, VÝSTUP);

mySwitch.enableReceive (0);

}

void loop () {

if (mySwitch.available ()) {

int value = mySwitch.getReceivedValue ();

if (value == B1000)

digitalWrite (3, HIGH);

jinak pokud (hodnota == B0100)

digitalWrite (3, LOW);

mySwitch.resetAvailable ();

    }

}

Zde prohlašujeme, že akceptovaná hodnota je uložena v proměnné Value v řetězci mySwitch.getReceivedValue (). A skutečnost, že přijímač je připojen k 2. kolíku, je zde popsána mySwiitch.enableReceive (0).

Zbytek kódu je elementární, pokud je přijat signál 0100, pak je číslo PIN 3 nastaveno na vysokou (log. Unit), a pokud 1000, pak na low (log. Zero).

Zajímavé:

V řádku mySwitch.enableTransmit (0) řekneme programu, že přijímač je připojen ke 2. kolíku a je zapnut režim příjmu. Nejvíce pozorní si všimli, že argumentem této metody není číslo PIN „2“, ale „0“, faktem je, že metoda enableTransmit (číslo) nepřijímá číslo PIN, ale číslo přerušení, ale v atmega328, který je kladen na Arduino Uno, nano, promini a několik dalších, na druhém kolíku (PortD pin PD2) zablokuje přerušení s číslem nula. Můžete to vidět na pinuu Atmega použitelném pro desku Arduino, čísla kolíků jsou psána v růžových rámečcích.

Atmega pinout

Tento způsob vysílání a přijímání je velmi jednoduchý a levný: pár přijímačů a vysílačů stojí v době psaní asi 1,5 $.


Wi-Fi, Adruino a ESP8266

Začněte tím, ESP8266 je mikrokontrolér s hardwarovou podporou Wi-Fi„Je prodáván jako samostatný čip a připájen k desce jako arduino. Má 32bitové jádro, je naprogramováno přes sériový port (UART).

Desky obvykle mají 2 nebo více volných pinů GPIO a vždy existuje pin pro firmware, musí to být provedeno přes USB na sériový adaptér. Úplný seznam příkazů, které jsou spravovány týmy AT, najdete na oficiálních webových stránkách ESP8266 a na githubu.

ESP8266

Existuje ještě zajímavější možnost, desky NodeMCU, protože mají schopnost flashovat přes USB Převodník USB-UART je již na desce, obvykle se vyrábí na čipu CP2102. Uzel MCU je firmware, něco jako operační systém, projekt založený na skriptovacím jazyce Lua.

Deska NodeMCU

Firmware může spouštět Lua skripty, buď jejich přijetím na sériovém portu, nebo reprodukcí algoritmů uložených v paměti Flash.

Mimochodem, má svůj vlastní souborový systém, ačkoli v něm nejsou žádné adresáře, tj. pouze soubory bez složek. Do paměti lze ukládat nejen skripty, ale také různá data, tj. deska může ukládat informace zaznamenané například ze senzorů.

Deska pracuje s rozhraními:

  • 1-Wire;

  • I2C;

  • SPI

  • UART.

Má celou řadu funkcí:

  • šifrovací modul;

  • plánovač úloh;

  • hodiny reálného času;

  • protokol synchronizace hodin prostřednictvím internetového SNTP;

  • časovače;

  • ADC kanál (jeden);

  • přehrávat zvukové soubory;

  • generovat na výstupech signál PWM (až 6);

  • pomocí soketů, existuje podpora pro FatFS, tj. můžete připojit SD karty atd.

ESP-12E

A tady je krátký seznam toho, s čím může deska pracovat:

  • akcelerometry ADXL345;

  • HMC5883L magnetometry

  • gyroskopy L3G4200D;

  • snímače teploty a vlhkosti AM2320, DHT11, DHT21, DHT22, DHT33, DHT44;

  • senzory teploty, vlhkosti, atmosférického tlaku BME280;

  • snímače teploty a atmosférického tlaku BMP085;

  • mnoho displejů pracujících na sběrnicích I2C, SPI. Se schopností pracovat s různými fonty;

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

  • chytré LED a kontroléry LED - WS2812, tm1829, WS2801, WS2812.

Kromě používání jazyka Lua můžete programovat také v rámci Arduino IDE.

ESP8266 lze použít jako samostatné zařízení nebo jako modul pro bezdrátovou komunikaci s Arduino.

Modul pro bezdrátovou komunikaci s Arduino

Zohlednění všech funkcí a funkcí této rady bude trvat celou řadu článků.

Tato deska je skvělou volbou pro dálkové ovládání přes Wi-Fi. Oblast působnosti je například obrovská, pokud jde o použití smartphonu jako ovládacího panelu pro provizorně řízený stroj nebo quadrocopter, dálkové ovládání osvětlení, až po uspořádání sítí pro celý dům a spravování každé zásuvky, lampy atd. kdyby jen bylo dost kolíků.

Nejjednodušší způsob práce s mikrokontrolérem je použití jediné desky ESP8266. Níže je schéma jednoduchého výstupu wi-fi.

Schéma nejjednodušší WiFi zásuvky

K sestavení tohoto obvodu potřebujete reléový modul nebo konvenční relé připojené ke kolíku přes tranzistor. Nejprve potřebujete program pro smartphone RoboRemoFree ,. V něm nakonfigurujete připojení k ESP a vytvoříte rozhraní pro ovládání zásuvky. Chcete-li popsat, jak jej používat, musíte napsat samostatný článek, takže tento materiál prozatím vynecháme.

V ESP načítáme následující firmware prostřednictvím programu ESPlorer (program pro práci s deskou)

- Nastavení Wifi AP

wifi.setmode (wifi.STATIONAP)

cfg = {}

cfg.ssid = "ESPTEST"

cfg.pwd = "1234567890"

wifi.ap.config (cfg)

- Nastavit režim Pin

my_pin_nummber = 1

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

gpio.mode (my_pin_nummber, gpio.OPENDRAIN)

- Vytvořte server

sv = net.createServer (net.TCP)

funkční přijímač (sck, data)

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

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

gpio.write (my_pin_nummber, gpio.LOW)

jinde

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

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

gpio.write (my_pin_nummber, gpio.HIGH)

konec

konec

tisk (data)

konec

pokud sv

sv: poslouchat (333, funkce (conn)

conn: on ("příjem", přijímač)

conn: send ("Ahoj!")

konec)

konec

- Vytvoření HTTP serveru

http = net.createServer (net.TCP)

funkce recipient_http (sck, data)

tisk (data)

místní požadavek = string.match (data, "([^ \ r, \ n] *) [\ r, \ n]", 1)

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

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

gpio.write (my_pin_nummber, gpio.LOW)

konec

pokud request == 'GET / off HTTP / 1.1' then

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

gpio.write (my_pin_nummber, gpio.HIGH)

konec

sck: on ("sent", function (sck) sck: close () collectgarbage () end)

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

" NodeMCU na ESP8266 " ..

"

NodeMCU na ESP8266

" ..

"


" ..

" Zapnuto Vypnuto " ..

" "

sck: send (odpověď)

konec

pokud tedy http

http: poslech (80, funkce (conn)

conn: on ("obdržet", obdržet_http)

konec)

konec

print ("Started.")

Nyní můžete program ovládat buď z programu Roboremo, nebo z jakéhokoli webového prohlížeče. K tomu musíte do adresního řádku v wi-fi bodovém režimu zadat ip-adresu desky 192.168.4.1.

V kódu je úryvek:

" NodeMCU na ESP8266 " ..

"

NodeMCU na ESP8266

" ..

"


" ..

" Zapnuto Vypnuto " ..

" "

Toto je druh reakce, která je vydána prohlížeči při přístupu na tabuli. Obsahuje HTML kód, tzn. Nejjednodušší webová stránka, podobná té, na které čtete tento článek.

Stránka v prohlížeči smartphonu se systémem Android

Zde je tato stránka spuštěná v prohlížeči smartphonu se systémem Android. Výše uvedené není úplná instrukce, protože by to vyžadovalo obrovské množství, pokud vás tyto informace zajímají - napište komentáře a my určitě provedeme recenzi a napíšeme článek o práci s nimi.

Viz také na i.electricianexp.com:

  • Připojení a programování Arduino pro začátečníky
  • Metody čtení a správy vstupních / výstupních portů Arduino
  • Co jsou displeje Nextion a jak s nimi pracovat?
  • Programovatelné mikrokontroléry v JavaScriptu: který zvolit, vlastnosti ...
  • Druhy a uspořádání mikrokontrolérů AVR

  •