Kategorie: Automatyka domowa, Obwody mikrokontrolera
Liczba wyświetleń: 17351
Komentarze do artykułu: 0

Pilot zdalnego sterowania mikrokontrolera: pilot na podczerwień, Arduino, ESP8266, 433 MHz

 

Kwestia zdalnego lub zdalnego sterowania urządzeniami elektrycznymi zawsze była i będzie istotna, niezależnie od tego, czy w systemie są narzędzia automatyzujące, czy nie. W przypadku organizacji zdalnego sterowania nie ma znaczenia, czy mikrokontroler, wszystko zależy od niezbędnych funkcji przypisanych do zarządzanego urządzenia. W tym artykule poznasz ogólne informacje o tym, jak zdalnie sterować mikrokontrolerem.

Pilot zdalnego sterowania mikrokontrolera

Gatunek

Istnieją dwa główne typy komunikacji zdalnej:


Przewodowy. Gdy sterowanie siłownikami znajdującymi się w jednym pomieszczeniu (lub nie w pomieszczeniu) odbywa się z panelu sterowania lub z przycisku umieszczonego w innym miejscu. W takim przypadku zapewnione jest elektryczne połączenie przewodów obwodów sterujących i siłowników (przekaźników, styczników, które obejmują mechanizmy, takie jak silniki lub układy, na przykład oświetlenie).


Bezprzewodowy. W tym przykładzie wykonania nie jest wymagane połączenie elektryczne obwodów sterowania i wykonawczego. W obwodach bezprzewodowych są dwa urządzenia: nadajnik lub pilot (RC) i odbiornik, który jest częścią obwodu sterowanego. Z kolei sterowanie bezprzewodowe jest powszechne w dwóch wersjach:

  • Przez sygnał optyczny. Takie systemy znajdują się w każdym domu, więc kontrolujesz działanie telewizora, klimatyzacji i innych urządzeń gospodarstwa domowego.

  • Sygnałem radiowym. Istnieje już wiele opcji: Bluetooth, ZigBee, Wi-Fi, nadajniki-odbiorniki 433 MHz i inne warianty na ten temat.

Warto zauważyć, że za pomocą nowoczesnych środków technicznych możesz kontrolować mikrokontroler, zarówno ze zdalnego sterowania, jak i przez Internet w sieci lokalnej lub z dostępem z dowolnego miejsca na świecie.



Pilot na podczerwień

Rozpoczynamy rozważanie od najprostszej i najbardziej klasycznej wersji. Sterowanie urządzeniem poprzez przesłanie kodu z sekwencji migania diody LED IR do odbiornika optycznego zainstalowanego w urządzeniu. Warto zauważyć, że widmo podczerwieni nie jest widoczne dla ludzkiego oka, ale większość aparatów fotograficznych i wideo to widzi.

Ponieważ większość kamer widzi podczerwień, możesz to sprawdzić serwisowalność pilotów zdalnego sterowania. Aby to zrobić, po prostu skieruj pilota w taki sposób, aby emiter spojrzał w kamerę i naciśnij przyciski. Zwykle na ekranie widoczny jest biały blask z fioletowym odcieniem.

Ta kontrola ma oczywistą wadę - musisz skierować pilota w stronę odbiornika. A jeśli baterie w pilocie się wyczerpią, musisz również celować, ponieważ operacje stają się coraz mniejsze.

Zaletami są prostota, łatwość konserwacji, zarówno nadajnik, jak i odbiornik. Możesz znaleźć szczegóły, rozmontowując uszkodzone piloty i telewizory, aby zastosować je we własnych projektach.

Typowy czujnik jest następujący. Ponieważ odbierany jest sygnał optyczny, należy wykluczyć wyzwalanie z zewnętrznych źródeł światła, takich jak słońce, lampy oświetleniowe i inne. Warto również zauważyć, że sygnał podczerwieni jest odbierany głównie na częstotliwości 38 kHz.

Czujnik podczerwieni

Oto specyfikacje jednego z czujników IR:

  • częstotliwość nośna: 38 kHz;

  • napięcie zasilania: 2,7 - 5,5 V;

  • pobór prądu: 50 μA.

I jego schemat połączeń:

Schemat podłączenia czujnika podczerwieni

Z pilota może korzystać każdy, kto ma podobną zasadę działania, piloty z:

  • Telewizory

  • Odtwarzacze DVD

  • magnetofony;

  • od nowoczesnych urządzeń oświetleniowych, takich jak inteligentne żyrandole i taśmy LED i wiele innych.

Panel sterowania

Oto przykład zastosowania takiego czujnika z Arduino

Przykład czujnika IR Arduino

Aby mikrokontroler, w naszym przypadku Arduin, mógł zrozumieć sygnał z czujnika, musisz skorzystać z biblioteki IRremote.h. Na przykład, jak odczytać sygnał z czujnika, podamy kod do rozpoznania go przez odczytanie portu szeregowego mikrokontrolera z Arduino IDE:

#include „IRremote.h” // podłącz bibliotekę do pracy z sygnałem IR.

IRrecv irrecv (2); // wskazuje wyjście, do którego podłączony jest odbiornik

wyniki decode_results;

void setup () {

Serial.begin (9600); // ustaw prędkość portu COM

irrecv.enableIRIn (); // rozpocznij odbiór

}

void loop () {

if (irrecv.decode (& results)) {// jeśli dane nadeszły

Serial.println (results.value, HEX); // wydrukuj dane

irrecv.resume (); // zaakceptuj następujące polecenie

  }

}

W rezultacie, kiedy sflashujesz arduino i zaczniesz „świecić” odbiornikiem za pomocą pilota, na monitorze portu szeregowego zobaczymy następujący obraz:

Monitor portu szeregowego

Są to kody, które wysyłają przyciski w postaci szesnastkowej. W ten sposób możesz dowiedzieć się, który przycisk na pilocie wysyła kod, dlatego nie ma szczególnych wymagań dotyczących używanego pilota, ponieważ możesz je rozpoznać i powiązać. Nawiasem mówiąc, jest to pomysł na projekt wyszkolonego uniwersalnego pilota, który został sprzedany wcześniej. Ale teraz, w dobie Internetu, ilość technologii kontrolowanych w ten sposób maleje każdego roku.

Za pomocą tego kodu możesz rozpoznać sygnały i zarządzać obciążeniem:

#include „IRremote.h”

IRrecv irrecv (2); // wskazuje wyjście, do którego podłączony jest odbiornik

wyniki decode_results;

void setup () {

irrecv.enableIRIn (); // rozpocznij odbiór

}

void loop () {

if (irrecv.decode (& results)) {// jeśli dane nadeszły

switch (results.value) {

sprawa 0xFFA857:

digitalWrite (13, WYSOKA);

przerwa;

sprawa 0xFFE01F:

digitalWrite (13, LOW);

przerwa;

    }   

irrecv.resume (); // zaakceptuj następujące polecenie

  }

}

Najważniejsze w kodzie jest rozpoznawanie za pomocą funkcji Switch, czasem nazywane są one „skrzynkami przełączników”. Jest to analogia do gałęzi if, ale ma piękniejszą formę postrzegania. Case - są to opcje, „jeśli taki kod nadejdzie, to ...” Kod steruje 13 pinami dla niektórych sygnałów. Przypomnę, że wbudowana dioda LED na płycie ARDUINO jest podłączona do pinu 13, tj. autor kodu kontrolował diodę LED.

Możesz kontrolować wszystko za pomocą wysokiego lub niskiego cyfrowego styku za pośrednictwem tranzystora mocy (który omówiliśmy w dwóch artykułach wcześniej tutaj i tutaj) przy obciążeniu prądem stałym lub przez triak i sterownik z obciążeniem prądem stałym, można również użyć przekaźników i styczników, ogólnie, całego pola wyobraźni.


Odbiór i transmisja sygnału radiowego

Do użytku z mikrokontrolerami powszechne są nadajniki o częstotliwościach roboczych 433 MHz lub 315 MHz, w zależności od konkretnej płyty mogą występować inne częstotliwości, ale są one najczęściej. System składa się z dwóch węzłów - logicznego odbiornika i nadajnika.

Odbiór i transmisja sygnału radiowego

Na zdjęciu nadajnik jest pokazany w prawym górnym rogu, a odbiornik w lewym dolnym rogu. Ich nazwa wyszukiwania: Moduł radiowy 433 MHz, MX-05V / XD-RF-5V (odbiornik i nadajnik).

Pinout, jak to często bywa w modułach, jest namalowany na płycie, podobnie jak nadajnik:

Nadajnik radiowy

Odbiornik nie jest tak oczywisty, ponieważ dane na płytce drukowanej są zapisywane na dwóch pinach, w rzeczywistości jeden z nich nie jest używany.

Odbiornik radiowy

Na przykład podajemy schemat i kod włączania diody LED z jednej płyty Arduino podłączonej do innej podobnej płyty, bez przewodów. Odbiornik i nadajnik są podłączone w ten sam sposób do obu płyt:

Odbiornik i nadajnik na płytkach

Urządzenie

Moduł

Szpilki Arduino

Odbiornik

Vcc

GND

DANE

+ 5 V.

GND

2

Nadajnik

Vcc

GND

DANE

+ 5 V.

GND

2 

Następnie musisz połączyć bibliotekę RCswitch.h z Arduino IDE

Aby rozpocząć, piszemy program nadajnika:

#include

RCSwitch mySwitch = RCSwitch(); // utwórz obiekt do pracy z interfejsem

void setup () {

    mySwitch.enableTransmit(2); // powiedz programowi, do którego pinu podłączony jest kanał informacyjny

}

void loop () {

mySwitch.send (B0100,4);

opóźnienie (1000);

mySwitch.send (B1000, 4);

    opóźnienie (1000);

} 

Nadajnik może przesyłać kod binarny, ale jego wartości można zapisać w postaci dziesiętnej.

mySwitch.send (B0100,4);

i

mySwitch.send (B1000, 4);

są to polecenia przesyłania, mySwitch to nazwa nadajnika, którą wskazaliśmy na początku kodu, a send to polecenie przesyłania. Argumentami tej funkcji są:

Nazwa nadajnika. Wysyłanie (wartość, wielkość pakietu impulsów wysyłanych do powietrza);

B1000 - symbol B - oznacza binarny, można go zapisać jako liczbę 8, tj. w notacji dziesiętnej. Inną opcją było napisanie „1000” jako ciągu (w cudzysłowie).

Następnie piszemy kod dla odbiornika (jest on flashowany na płycie, do której podłączony jest odbiornik):

#include

RCSwitch mySwitch = RCSwitch ();

void setup () {

pinMode (3, WYJŚCIE);

mySwitch.enableReceive (0);

}

void loop () {

if (mySwitch.available ()) {

int wartość = mySwitch.getReceivedValue ();

if (wartość == B1000)

digitalWrite (3, WYSOKI);

else if (wartość == B0100)

digitalWrite (3, LOW);

mySwitch.resetAvailable ();

    }

}

Tutaj deklarujemy, że zaakceptowana wartość jest przechowywana w zmiennej Value w ciągu mySwitch.getReceivedValue (). A fakt, że odbiornik jest podłączony do 2-go styku jest opisany tutaj przez mySwiitch.enableReceive (0).

W przeciwnym razie kod jest elementarny, jeśli odbierany jest sygnał 0100, wówczas pin nr 3 jest ustawiany na wysoki (log. Jednostka), a jeśli 1000, to na niski (log. Zero).

Ciekawe:

W wierszu mySwitch.enableTransmit (0) mówimy programowi, że odbiornik jest podłączony do drugiego pinu i włączony jest tryb odbioru. Najbardziej uważni zauważyli, że argumentem tej metody nie jest numer pinu „2”, ale „0”, faktem jest, że metoda enableTransmit (liczba) nie akceptuje numeru pinu, ale numer przerwania, ale w atmega328, który jest włączony Arduino Uno, nano, promini i kilka innych, na drugim pinie (pin PortD PD2) zawiesza się przerwanie o numerze zero. Widać to na pinoucie Atmega obowiązującym na płycie Arduino, numery pinów są zapisane w różowych polach.

Pinout Atmega

Ta metoda nadawania i odbierania jest bardzo prosta i tania; para odbiornika i nadajnika kosztuje około 1,5 USD w momencie pisania.


Wi-Fi, Adruino i ESP8266

Na początek ESP8266 to mikrokontroler ze sprzętową obsługą Wi-Fi, Jest sprzedawany jako oddzielny układ i przylutowany do planszy, jak arduino. Ma 32-bitowe jądro, jest programowane przez port szeregowy (UART).

Płytki zwykle mają 2 lub więcej wolnych pinów GPIO i zawsze są szpilki do oprogramowania układowego, należy to zrobić za pomocą przejściówki USB na port szeregowy. Pełna lista poleceń, zarządzana przez zespoły AT, znajduje się na oficjalnej stronie ESP8266 i na github.

ESP8266

Istnieje bardziej interesująca opcja, płyty NodeMCU, mają możliwość flashowania przez USB, ponieważ Konwerter USB-UART jest już na płycie, zwykle wykonany na układzie CP2102. Węzeł MCU to oprogramowanie układowe, coś w rodzaju systemu operacyjnego, projekt oparty na języku skryptowym Lua.

Płyta NodeMCU

Oprogramowanie układowe może wykonywać skrypty Lua, akceptując je na porcie szeregowym lub odtwarzając algorytmy zapisane w pamięci Flash.

Nawiasem mówiąc, ma swój własny system plików, chociaż nie ma w nim katalogów, tj. tylko pliki bez folderów. W pamięci można przechowywać nie tylko skrypty, ale także różne dane, tj. tablica może przechowywać zapisane informacje, na przykład z czujników.

Płytka współpracuje z interfejsami:

  • 1-Wire;

  • I2C;

  • SPI

  • UART.

Ma cały szereg funkcji:

  • moduł szyfrowania;

  • harmonogram zadań;

  • zegar czasu rzeczywistego;

  • protokół synchronizacji zegara przez Internet SNTP;

  • liczniki;

  • Kanał ADC (jeden);

  • odtwarzać pliki audio;

  • generować na wyjściach sygnał PWM (do 6);

  • używaj gniazd, istnieje obsługa FatFS, tzn. możesz podłączyć karty SD i tak dalej.

ESP-12E

Oto krótka lista elementów, z którymi tablica może współpracować:

  • akcelerometry ADXL345;

  • Magnetometry HMC5883L

  • żyroskopy L3G4200D;

  • czujniki temperatury i wilgotności AM2320, DHT11, DHT21, DHT22, DHT33, DHT44;

  • czujniki temperatury, wilgotności, ciśnienia atmosferycznego BME280;

  • czujniki temperatury i ciśnienia atmosferycznego BMP085;

  • wiele wyświetlaczy pracujących na magistrali I2C, SPI. Dzięki możliwości pracy z różnymi czcionkami;

  • TFT wyświetla ILI9163, ILI9341, PCF8833, SEPS225, SSD1331, SSD1351, ST7735;

  • inteligentne diody LED i kontrolery LED - WS2812, tm1829, WS2801, WS2812.

Oprócz używania języka Lua, możesz programować tablicę spod Arduino IDE.

ESP8266 może być używany jako samodzielne urządzenie lub jako moduł do bezprzewodowej komunikacji z Arduino.

Moduł do bezprzewodowej komunikacji z Arduino

Rozpatrzenie wszystkich funkcji i cech tej płyty zajmie całą serię artykułów.

Ta płyta jest więc świetną opcją do zdalnego sterowania przez Wi-Fi. Zakres jest ogromny, na przykład użycie smartfona jako panelu sterowania dla prowizorycznej sterowanej radiowo maszyny lub kwadrokoptera, zdalne sterowanie oświetleniem, aż do aranżacji sieci dla całego domu i zarządzania każdym gniazdkiem, lampą itp. gdyby tylko było wystarczająco dużo szpilek.

Najprostszym sposobem pracy z mikrokontrolerem jest użycie pojedynczej płytki ESP8266. Poniżej znajduje się schemat prostego gniazdka Wi-Fi.

Schemat najprostszego gniazdka Wi-Fi

Aby złożyć ten obwód, potrzebujesz modułu przekaźnikowego lub konwencjonalnego przekaźnika podłączonego do pinu poprzez tranzystor. Najpierw potrzebujesz programu na smartfon RoboRemoFree. W nim skonfigurujesz połączenie z ESP i stworzysz interfejs do kontrolowania gniazdka. Aby opisać, jak go używać, musisz napisać osobny artykuł, więc na razie pomiń ten materiał.

W ESP ładujemy następujące oprogramowanie za pomocą programu ESPlorer (program do pracy z płytą)

- Konfiguracja AP Wi-Fi

wifi.setmode (wifi.STATIONAP)

cfg = {}

cfg.ssid = "ESPTEST"

cfg.pwd = "1234567890"

wifi.ap.config (cfg)

- Ustaw tryb Pin

my_pin_nummber = 1

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

gpio.mode (mój_pin_nummber, gpio.OPENDRAIN)

- Utwórz serwer

sv = net.createServer (net.TCP)

odbiornik funkcji (sck, dane)

jeśli string.sub (data, 0, 1) == "1", to

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

gpio.write (my_pin_nummber, gpio.LOW)

jeszcze

jeśli string.sub (data, 0, 1) == "0", to

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

gpio.write (my_pin_nummber, gpio.HIGH)

koniec

koniec

drukuj (dane)

koniec

jeśli sv wtedy

sv: listen (333, function (conn)

conn: on („odbiór”, odbiornik)

conn: send („Hello!”)

koniec)

koniec

- Utwórz serwer HTTP

http = net.createServer (net.TCP)

funkcja receive_http (sck, dane)

drukuj (dane)

żądanie lokalne = string.match (dane, „([^ \ r, \ n] *) [\ r, \ n]", 1)

jeśli żądanie == „GET / on HTTP / 1.1”, to

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

gpio.write (my_pin_nummber, gpio.LOW)

koniec

jeśli żądanie == „GET / off HTTP / 1.1”, to

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

gpio.write (my_pin_nummber, gpio.HIGH)

koniec

sck: on („wysłany”, funkcja (sck) sck: close () collectgarbage () end)

odpowiedź lokalna = "HTTP / 1.0 200 OK \ r \ nSerwer: NodeMCU na ESP8266 \ r \ n Typ zawartości: text / html \ r \ n \ r \ n" ..

NodeMCU na ESP8266 ” ..

NodeMCU na ESP8266

” ..


” ..

Włącz Wyłącz ” ..

„ ”

sck: wyślij (odpowiedź)

koniec

jeśli http to

http: listen (80, funkcja (połącz)

conn: on ("receive", receive_http)

koniec)

koniec

drukuj („Rozpoczęto”)

Teraz możesz sterować programem za pomocą programu Roboremo lub dowolnej przeglądarki internetowej, w tym celu musisz wpisać adres IP płyty w pasku adresu w trybie punktu Wi-Fi 192.168.4.1.

W kodzie znajduje się fragment kodu:

NodeMCU na ESP8266 ” ..

NodeMCU na ESP8266

” ..


” ..

Włącz Wyłącz ” ..

„ ”

Jest to rodzaj odpowiedzi wysyłanej do przeglądarki podczas uzyskiwania dostępu do tablicy. Zawiera kod HTML, tj. Najprostsza strona internetowa, podobna do tej, na której czytasz ten artykuł.

Strona w przeglądarce smartfona z systemem operacyjnym Android

Oto ta strona, uruchomiona w przeglądarce smartfona z systemem operacyjnym Android. Powyższe nie jest kompletną instrukcją, ponieważ zajęłoby to ogromną ilość, jeśli jesteś zainteresowany tymi informacjami - napisz komentarze, a na pewno przeprowadzimy recenzję i napisz artykuł o pracy z nią.

Zobacz także na e.imadeself.com:

  • Podłączanie i programowanie Arduino dla początkujących
  • Metody odczytu i zarządzania portami we / wy Arduino
  • Co to są wyświetlacze Nextion i jak z nimi pracować?
  • Programowalne mikrokontrolery w JavaScript: który wybrać, cechy ...
  • Rodzaje i rozmieszczenie mikrokontrolerów AVR

  •