категории: Домашна автоматизация, Микроконтролер вериги
Брой преглеждания: 17351
Коментари към статията: 0

Дистанционно управление на микроконтролер: IR дистанционно, Arduino, ESP8266, 433 MHz

 

Въпросът за дистанционното или дистанционното управление на електрическото оборудване винаги е бил и ще бъде актуален, независимо дали в системата има инструменти за автоматизация или не. За организацията на дистанционното управление изобщо няма значение дали микроконтролер, всичко зависи от необходимите функции, възложени на управляваното устройство. В тази статия ще научите обща информация за това как дистанционно да управлявате микроконтролер.

Микроконтролер дистанционно управление

видове

Има два основни типа комуникация от разстояние:


кабелен, Когато управлението на задвижващите механизми, разположени в една стая (или не в стаята), се извършва от контролния панел или от бутон с бутон, разположен на друго място. В този случай е осигурена електрическа жична връзка на управляващите вериги и задействащи устройства (релета, контактори, които включват механизми, като двигатели или системи, например осветление).


безжична, В това изпълнение не се изисква електрическо свързване на управляващите и изпълнителните вериги. В безжичните вериги има две устройства: предавател или дистанционно управление (RC) и приемник, който е част от управляваната верига. Безжичното управление от своя страна е често срещано в две версии:

  • По оптичен сигнал. Такива системи има във всеки дом, така че контролирате работата на телевизора, климатика и други домакински уреди.

  • По радио сигнал. Вече има редица опции: Bluetooth, ZigBee, Wi-Fi, 433 MHz предаватели-приемници и други варианти по този въпрос.

Струва си да се отбележи, че с модерни технически средства можете да управлявате микроконтролера, както от дистанционното управление, така и чрез интернет в локална мрежа или с достъп от всяка точка на света.



IR дистанционно

Започваме разглеждането си с най-простата и класическа версия. Контрол на устройството чрез предаване на код от трептящата последователност на IR светодиода до оптичния приемник, инсталиран на устройството. Заслужава да се отбележи, че инфрачервеният спектър не се вижда от човешкото око, но повечето фото и видео камери го виждат.

Тъй като повечето камери виждат инфрачервено, можете да проверите работоспособност на дистанционното управление, За целта просто насочете дистанционното управление, така че излъчвателят да гледа в камерата и да натиснете бутоните. Обикновено на екрана се вижда бяло сияние с лилав оттенък.

Това управление има очевиден недостатък - трябва да насочите дистанционното към приемника. И ако батериите в дистанционното управление са изтощени, тогава също трябва да се стремите, тъй като операциите стават все по-малко.

Предимствата са простота, висока поддръжка, както на предавателя, така и на приемника. Можете да намерите детайлите, като демонтирате счупените дистанционни и телевизори, за да приложите това в собствените си проекти.

Типичен сензор е следният. Тъй като оптичният сигнал се получава, е необходимо да се изключи задействането от външни източници на светлина, като слънцето, осветителните лампи и други. Също така си струва да се отбележи, че инфрачервеният сигнал се приема главно с честота 38 kHz.

ИЧ сензор

Ето спецификациите на един от IR сензорите:

  • носеща честота: 38 kHz;

  • захранващо напрежение: 2,7 - 5,5 V;

  • консумация на ток: 50 μA.

И схемата на връзката му:

Диаграма за свързване на IR сензор

Дистанционното управление може да се използва от всеки с подобен принцип на работа, а дистанционното управление от:

  • телевизори;

  • DVD плейъри

  • радио касетофони;

  • от модерни осветителни устройства, като интелигентни полилеи и LED ленти и други.

Контролен панел

Ето пример за използване на такъв сензор с Ардуино

Пример за IR IR сензор Arduino

За да може микроконтролерът, в нашия случай Arduin, да разбере сигнала от сензора, трябва да използвате библиотеката IRremote.h. За пример как да четете сигнал от датчик, ето код за разпознаването им чрез прочитане на серийния порт на микроконтролера от Arduino IDE:

#include "IRremote.h" // свържете библиотеката за работа с IR сигнала.

IRrecv ircv (2); // посочете изхода, към който е свързан приемникът

decode_results резултати;

настройка за невалидност () {

Serial.begin (9600); // задайте скоростта на COM порта

ircv.enableIRIn (); // стартирайте приема

}

void loop () {

ако (nerev.decode (& резултати)) {// ако данните са дошли

Serial.println (results.value, HEX); // отпечатване на данни

ircv.resume (); // приемете следната команда

  }

}

В резултат на това, когато флаш ардуино и започне да "свети" в приемника с дистанционното управление, ще видим следната картина в монитора на серийния порт:

Монитор на сериен порт

Това са кодове, които изпращат бутони в шестнадесетична форма. По този начин можете да разберете кой бутон на дистанционното управление кой код изпраща, така че няма конкретни изисквания за използваното дистанционно управление, защото можете да разпознаете и асоциирате всеки. Между другото, това е идея за проект на обучено универсално дистанционно управление, такива бяха продадени по-рано. Но сега в ерата на Интернет количеството технология, контролирана по този начин, намалява всяка година.

И с този код можете да разпознавате сигнали и да управлявате натоварването:

#include "IRremote.h"

IRrecv ircv (2); // посочете изхода, към който е свързан приемникът

decode_results резултати;

настройка за невалидност () {

ircv.enableIRIn (); // стартирайте приема

}

void loop () {

ако (nerev.decode (& резултати)) {// ако данните са дошли

превключвател (резултати. стойност) {

случай 0xFFA857:

digitalWrite (13, HIGH);

прекъсване;

случай 0xFFE01F:

digitalWrite (13, LOW);

прекъсване;

    }   

ircv.resume (); // приемете следната команда

  }

}

Основното в кода е разпознаването чрез функцията Switch, понякога те се наричат ​​"превключвател". Той е аналог на разклоненията if, но има по-красива форма за възприятие. Случай - това са опциите, "ако пристигне такъв код, тогава ..." Кодът контролира 13 пина за определени сигнали. Нека ви напомня, че вграденият светодиод на платката ARDUINO е свързан към пин 13, т.е. авторът на кода контролира светодиода.

Можете да контролирате всичко, като използвате висок или нисък цифров щифт чрез захранващ транзистор (който разгледахме в две статии по-рано тук и тук) с натоварване на постоянен ток или чрез триак и драйвер за него с натоварване с постоянен ток, можете също да използвате релета и контактори, като цяло, цяло поле за въображение.


Приемане и предаване на радиосигнали

За използване с микроконтролери, често срещани са предавателите с честоти 433 MHz или 315 MHz, може да има и други честоти, в зависимост от конкретната платка, но те са най-често срещаните. Системата се състои от два възла - приемник и предавател, което е логично.

Приемане и предаване на радиосигнали

На снимката предавателят е показан горе вдясно, а приемникът в долната лява част. Името им за търсенето: 433MHz радио модул, MX-05V / XD-RF-5V (приемник и предавател).

Изводът, както често се случва при модулите, е нарисуван на платката, като предавателя:

Радио предавател

Приемникът не е толкова очевиден, тъй като Данните на платката с печатни платки са написани на два пина, всъщност един от тях не се използва.

Радио приемник

Например даваме диаграма и код за включване на светодиода от една платка Arduino, свързана към друга подобна платка, без проводници. Приемникът и предавателят са свързани по един и същи начин към двете платки:

Приемникът и предавателят на платките

приспособление

модул

Ардуино щифтове

приемник

VCC

GND

DATA

+ 5V

GND

2

предавател

VCC

GND

DATA

+ 5V

GND

2 

След това трябва да свържете библиотеката RCswitch.h към ID на Arduino

За начало пишем програмата за предавател:

#include

RCSwitch mySwitch = RCSwitch(); // създаване на обект за работа с предния край

настройка за невалидност () {

    mySwitch.enableTransmit(2); // кажете на програмата, към който е свързан информационният канал

}

void loop () {

mySwitch.send (B0100,4);

забавяне (1000);

mySwitch.send (B1000, 4);

    забавяне (1000);

} 

Предавателят може да предава двоичен код, но неговите стойности могат да бъдат записани в десетична форма.

mySwitch.send (B0100,4);

и

mySwitch.send (B1000, 4);

това са командите за прехвърляне, mySwitch е името на предавателя, което посочихме в началото на кода, а изпращането е командата за прехвърляне. Аргументите за тази функция са:

Име на предавателя.send (стойност, размер на пакета импулси, изпратени във въздуха);

B1000 - символът B - означава двоичен, може да се запише като числото 8, т.е. в десетична нотация. Друг вариант беше да напишете „1000“ като низ (в кавички).

След това пишем кода за приемника (той се мига в платката, към която е свързан приемникът):

#include

RCSwitch mySwitch = RCSwitch ();

настройка за невалидност () {

pinMode (3, изход);

mySwitch.enableReceive (0);

}

void loop () {

ако (mySwitch.available ()) {

int стойност = mySwitch.getReceivedValue ();

ако (стойност == B1000)

digitalWrite (3, HIGH);

иначе ако (стойност == B0100)

digitalWrite (3, LOW);

mySwitch.resetAvailable ();

    }

}

Тук заявяваме, че приетата стойност се съхранява в променливата Стойност в низа mySwitch.getReceivedValue (). И фактът, че приемникът е свързан към втория пин, е описан тук от mySwiitch.enableReceive (0).

Останалата част от кода е елементарна, ако е получен сигнал 0100, тогава пин номер 3 е зададен на висок (лог. Единица), а ако 1000, то на нисък (лог. Нула).

Чудя се:

В реда mySwitch.enableTransmit (0) казваме на програмата, че приемникът е свързан към втория пин и режимът на получаване е включен. Най-внимателните забелязаха, че аргументът на този метод не е пин номер "2", а "0", факт е, че методът enableTransmit (число) не приема номера на пина, а номера на прекъсване, но в atmega328, който е поставен на Arduino Uno, nano, promini и няколко други, на втория щифт (PortD pin PD2) виси прекъсване с числото нула. Можете да видите това в раздела Atmega, приложим към дъската Arduino, номерата на щифтовете са изписани в розови кутии.

Atmega pinout

Този метод на предаване и получаване е много прост и евтин; чифт приемник и предавател струва около 1,5 долара в момента на писане.


Wi-Fi, Adruino и ESP8266

Като начало, ESP8266 е микроконтролер с хардуерна поддръжка за Wi-Fi, Продава се като отделен чип и спойка към дъската, като ардуино. Той има 32-битово ядро, той се програмира през сериен порт (UART).

Платките обикновено имат 2 или повече безплатни GPIO пина и винаги има щифтове за фърмуер, това трябва да стане чрез USB към сериен адаптер. Управляван от AT екипи, пълен списък с команди можете да намерите на официалния уебсайт на ESP8266 и на github.

ESP8266

Има по-интересен вариант, NodeMCU платките, те имат възможност да мигат през USB, защото USB-UART конвертор вече е на платката, обикновено се прави на чип CP2102. Node MCU е фърмуер, нещо като операционна система, проект, базиран на скриптовия език Lua.

NodeMCU Board

Фърмуерът може да изпълнява скриптове на Lua, или като ги приема на сериен порт, или чрез възпроизвеждане на алгоритми, съхранени във флаш паметта.

Между другото, тя има собствена файлова система, въпреки че в нея няма директории, т.е. само файлове без папки. В паметта могат да се съхраняват не само скриптове, но и различни данни, т.е. таблото може да съхранява информация, записана например от сензори.

Платката работи с интерфейси:

  • 1-тел;

  • I2C;

  • SPI;

  • UART.

Той има цял набор от функции:

  • модул за криптиране;

  • планиране на задачи;

  • часовник в реално време;

  • протокол за синхронизация на часовника чрез интернет SNTP;

  • таймери;

  • ADC канал (един);

  • възпроизвеждане на аудио файлове;

  • генерира на изходите PWM сигнал (до 6);

  • използвайте сокети, има поддръжка за FatFS, т.е. можете да свържете SD карти и т.н.

ESP-12E

Ето и кратък списък с какво може да работи борда:

  • акселерометри ADXL345;

  • HMC5883L магнитометри

  • жироскопи L3G4200D;

  • сензори за температура и влажност AM2320, DHT11, DHT21, DHT22, DHT33, DHT44;

  • сензори за температура, влажност, атмосферно налягане BME280;

  • сензори за температура и атмосферно налягане BMP085;

  • много дисплеи, работещи на I2C, SPI шини. С възможност за работа с различни шрифтове;

  • TFT дисплеи ILI9163, ILI9341, PCF8833, SEPS225, SSD1331, SSD1351, ST7735;

  • интелигентни светодиоди и LED контролери - WS2812, tm1829, WS2801, WS2812.

В допълнение към използването на езика на Lua, можете да програмирате платката под Arduino IDE.

ESP8266 може да се използва като самостоятелно устройство или като модул за безжична комуникация с Arduino.

Модул за безжична комуникация с Arduino

Разглеждането на всички функции и функции на този съвет ще отнеме цяла поредица от статии.

Така че тази платка е чудесна опция за дистанционно управление чрез Wi-Fi. Обхватът е огромен, например да се използва смартфон като контролен панел за импровизирана радиоуправляема машина или квадрокоптер, дистанционно управление на осветлението, до подреждане на мрежи за цялата къща и управление на всеки контакт, лампа и т.н. ако имаше само достатъчно пинове.

Най-простият начин за работа с микроконтролера е използването на една платка ESP8266. По-долу е диаграма на обикновен Wi-Fi изход.

Схема на най-простия изход за wifi

За да сглобите тази схема, ви е необходим релеен модул или конвенционално реле, свързано с щифт през транзистор. Първо се нуждаете от програма за смартфон RoboRemoFree,. В него ще конфигурирате връзката с ESP и ще направите интерфейс за контрол на изхода. За да опишете как да го използвате, трябва да напишете отделна статия, така че нека сега да пропуснем този материал.

В ESP ние зареждаме следния фърмуер, чрез програмата ESPlorer (програма за работа с платката)

--Wifi AP Settup

wifi.setmode (wifi.STATIONAP)

cfg = {}

cfg.ssid = "ESPTEST"

cfg.pwd = "1234567890"

wifi.ap.config (cfg)

--Настройте пинов режим

my_pin_nummber = 1

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

gpio.mode (my_pin_nummber, gpio.OPENDRAIN)

- Създаване на сървър

sv = net.createServer (net.TCP)

функционален приемник (sck, данни)

ако string.sub (данни, 0, 1) == "1" тогава

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

gpio.write (my_pin_nummber, gpio.LOW)

още

ако string.sub (данни, 0, 1) == "0" тогава

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

gpio.write (my_pin_nummber, gpio.HIGH)

край

край

печат (данни)

край

ако sv тогава

sv: слушам (333, функция (conn)

conn: on ("получаване", приемник)

conn: изпрати ("Здравей!")

край)

край

- Създайте HTTP сървър

http = net.createServer (net.TCP)

функция accept_http (sck, данни)

печат (данни)

локална заявка = string.match (данни, "([^ \ r, \ n] *) [\ r, \ n]", 1)

ако искане == 'GET / на HTTP / 1.1', тогава

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

gpio.write (my_pin_nummber, gpio.LOW)

край

ако искане == 'GET / off HTTP / 1.1', тогава

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

gpio.write (my_pin_nummber, gpio.HIGH)

край

sck: on ("изпратен", функция (sck) sck: затвори () събиране на смет () край)

локален отговор = "HTTP / 1.0 200 ОК \ r \ nСервър: NodeMCU на ESP8266 \ r \ nСъдържание тип: текст / html \ r \ n \ r \ n" ..

" NodeMCU на ESP8266 " ..

"

NodeMCU на ESP8266

" ..

"


" ..

" Включен Изключен " ..

" "

sck: изпрати (отговор)

край

ако http тогава

http: слушам (80, функция (conn)

conn: on ("получи", получи_http)

край)

край

печат ("Започнато.")

Сега можете да контролирате програмата или от програмата Roboremo, или чрез всеки уеб браузър, за това трябва да напишете IP адреса на таблото в адресната лента в режим wi-fi, тя 192.168.4.1.

В кода има фрагмент:

" NodeMCU на ESP8266 " ..

"

NodeMCU на ESP8266

" ..

"


" ..

" Включен Изключен " ..

" "

Това е вид отговор, който се издава на браузъра при достъп до дъската. Той съдържа HTML код, т.е. Най-простата уеб страница, подобна на тази, на която четете тази статия.

Страницата в браузъра на смартфона с операционна система Android

Ето тази страница, стартирана в браузъра на смартфон с операционна система Android. Горното не е пълна инструкция, тъй като ще отнеме огромно количество, ако се интересувате от тази информация - пишете коментари и определено ще направим преглед и ще напишем статия за работата с нея.

Вижте също на i.electricianexp.com:

  • Свързване и програмиране на Arduino за начинаещи
  • Методи за четене и управление на Arduino I / O портове
  • Какво представляват дисплеите на Nextion и как да работите с тях?
  • Програмируеми микроконтролери в JavaScript: кой да изберем, характеристики
  • Видове и разположение на AVR микроконтролери

  •