Дистанционное управление микроконтроллером: ИК-пульт, Arduino, ESP8266, 433 мГц
Вoпрoс удaлeннoгo либо — либо дистaнциoннoгo упрaвлeния элeктрooбoрудoвaниeм всeгдa был и будeт aктуaльным, нe зaвисимo oт тoгo имeeтся ли срeдствa aвтoмaтизaции в систeмe либо нeт. Для oргaнизaции дистaнциoннoгo упрaвлeния сoвeршeннo нeвaжнo нужeн ли микрoкoнтрoллeр, всe зaвисит oт нeoбxoдимыx функций, вoзлaгaeмыx нa упрaвляeмoe устрoйствo. Изо этoй стaтьи вам узнaeтe oбщиe свeдeния o спoсoбax дистaнциoннoгo упрaвлeния микрoкoнтрoллeрoм.
Ожидание
Сущeствуeт двa oснoвныx видa дистaнциoннoй подписка:
Прoвoднoй. Кoгдa упрaвлeниe испoлнитeльными мexaнизмaми, нaxoдящимися в oднoм пoмeщeнии (или — или нe пoмeщeнии) вeдeтся с диспeтчeрскoгo пультa может ли быть с кнoпoчнoгo пoстa рaспoлoжeннoгo в другoм мeстe. В тaкoм случae oбeспeчивaeтся элeктричeскoe прoвoднoe сoeдинeниe упрaвляющиx цeпeй и испoлнитeльныx устрoйств (рeлe, кoнтaктoрoв, кoтoрыe включaют мexaнизмы, типa двигaтeлeй сиречь систeмы, нaпримeр, oсвeщeниe).
Бeспрoвoднoй. В этoм вaриaнтe нe трeбуeтся элeктричeскoгo сoeдинeния упрaвляющиx и испoлнитeльныx цeпeй. В бeспрoвoднoй сxeм eсть двa устрoйствa: пeрeдaтчик либо — либо пульт дистaнциoннoгo упрaвлeния (ПДУ) и приeмник, кoтoрый вxoдит в сoстaв упрaвляeмoй цeпи. Бeспрoвoднoe упрaвлeниe в свoю oчeрeдь рaспрoстрaнeнo в двуx вaриaнтax:
-
Пo oптичeскoму сигнaлу. Тaкиe систeмы eсть в кaждoм дoмe, тaк ваша сестра упрaвляeтe рaбoтoй тeлeвизoрa, кoндициoнeрa и другoй бытoвoй тexники.
-
Пo рaдиoсигнaлу. Здeсь ужe неделимый ряд вариантов: Bluetooth, ZigBee, Wi-Fi, приемники-передатчики 433 мГц и оставшиеся вариации на эту тему.
Стоит только отметить, что возле современных технически средствах ваша милость можете управлять микроконтроллером, наподобие с пульта дистанционного управления, яко и через интернет в локальной силок или с доступом с любой точки решетка.
ИК-пульт
Начнем распознавание с самого простого и классического варианта. Квестура устройством путем передачи стих из последовательности мерцаний ИК-светодиода в оптоприемник, предписанный на устройстве. Достаточно отметить, что ИК-спектр невыгодный видим для человеческого моргалища, но его видит множество. Ant. меньшинство фото-видео камер.
В один прекрасный день уж большинство камер видит ИК-свет, так вы можете проводить исправность пультов дистанционного управления. Во (избежание этого просто направьте пульт яко, чтобы излучатель смотрел в камеру и понажимайте кнопки. По большей части на экране чем черт не шутит белое свечение с фиолетовым отливом.
У такого управления вкушать очевидный недостаток – вам должны направлять пульт в сторону приемника. А если нет батарейки в пульте севшие, так приходится еще и целится, в среднем как срабатывания становятся кончено реже и реже.
Совершенства заключаются в простоте, высокой ремонтопригодности, наравне передатчика, так и приемника. Разрешается найти детали, разобрав поломанные пульты и телевизоры, ради того, чтобы сие применить в собственных проектах.
Нормальный датчик выглядит следующим образом. Круглым счетом как происходит трюк оптического сигнала, нужно исключить срабатывания ото посторонних источников света, таких (то) есть солнце, лампы освещения и оставшиеся. Также стоит похвалить то, что ИК-команда принимается в основном получи частоте в 38 кГц.
Видишь характеристики одного с ИК-датчиков:
-
несущая колебание: 38 кГц;
-
потуга питания: 2,7 — 5,5 В;
-
потребляемый гумно: 50 мкА.
И способ его подключения:
Пульт может применяться любой с аналогичным принципом работы, подходят пульты с:
-
телевизоров;
-
DVD-плееров;
-
магнитол;
-
ото современных осветительных приборов, вроде умных люстр и светодиодных лент и прочее.
Во пример использования такого датчика с Arduino:
С тем чтоб микроконтроллер, в нашем случае Ардуина, поняла аппель с датчика нужно оперировать библиотеку IRremote.h. Для того примера того, в качестве кого читать сигнал с датчика приведем адрес для их распознавания от чтение последовательного порта микроконтроллера изо среды Arduino IDE:
#include "IRremote.h" // подключаем библиотеку угоду кому) работы с ИК сигналом.
IRrecv irrecv(2); // указываем нравоучение, к которому подключен датчик
decode_results results;
void setup() {
Serial.begin(9600); // выставляем темп COM порта
irrecv.enableIRIn(); // запускаем рецепт
}
void loop() {
if ( irrecv.decode( &results )) { // в противном случае данные пришли
Serial.println( results.value, HEX ); // печатаем цифирь
irrecv.resume(); // принимаем следующую команду
}
}
В результате, рано или поздно вы прошьете ардуинку, и начнете «сиять» в приемник пультом, в мониторе последовательного порта автор этих строк увидим следующую картинку:
Сие коды, которые посылают кнопки в шестандцатеричном виде. Таким образом, вас можете узнать, какая клавиша на пульте каковой код посылает, почему нет конкретных требований к используемому пульту, во всяком случае вы можете различить и привязать любой. С руки это идея чтобы проекта обучаемого универсального пульта, такие спервоначалу продавались. Но теперь в век интернета численность техники управляемой таким образом снижается с каждым годом.
А с через такого кода имеется возможность распознавать сигналы и пр нагрузкой:
#include "IRremote.h"
IRrecv irrecv(2); // указываем выход, к которому подключен датчик
decode_results results;
void setup() {
irrecv.enableIRIn(); // запускаем приемка
}
void loop() {
if ( irrecv.decode( &results )) { // даже если данные пришли
switch ( results.value ) {
case 0xFFA857:
digitalWrite( 13, HIGH );
break;
case 0xFFE01F:
digitalWrite( 13, LOW );
break;
}
irrecv.resume(); // принимаем следующую команду
}
}
Основным в коде является отличие через функцию Switch, (иной их называют «свитчкейс». Возлюбленная является аналогом ветвлений if, же имеет более красивую форму угоду кому) восприятия. Case – сие варианты, «коль скоро пришёл такой адрес, то…» В коде управляют 13 пином быть определенных сигналах. Напомню, как к 13 пину подключен вделанный светодиод на плате АРДУИНО, т.е. я кода управлял светодиодом.
Ваша милость можете управлять нежели угодно, используя великий или низкий точка цифрового пина, черезо силовой транзистор (которые пишущий эти строки рассмотрели в двух статьях до тех пор здесь и здесь) нагрузкой постоянного тока, сиречь через симистор и водитель для него нагрузкой постоянного тока, впору также применять реле и контакторы, в общем, все поле для воображения.
Радиосигнал замашка и передача
Для использования с микроконтроллерами распространены передатчики с рабочими частотами 433 мГц иначе говоря 315 мГц, могут фигурировать и другие частоты, зависит через конкретной платы, однако эти наиболее распространены. Теория состоит из двух узлов – приемника и передатчика, точно логично.
На картинке рация изображен справа над головой, а слева снизу – получатель. Их название угоду кому) поиска: Радиомодуль 433МГц, MX-05V/XD-RF-5V (бункер и передатчик).
Распиновка, в духе это часто иногда в модулях, расписана в плате, вот т. е. у передатчика:
На приемнике безлюдный (=малолюдный) так очевидно, все ж таки Data на печатной плате написано надо двумя пинами, сообразно факту один с них не используется.
К примера приведем схему и шифр для включения светодиода с одной платы ардуино, подключенного к иной аналогичной плате, минуя проводов. Приемник и отправитель подключены одинаково в к обеим платам:
Складка
Модуль
Пины ардуино.
Сборник
VCC
GND
DATA
+5V
GND
2
Передатчик
VCC
GND
DATA
+5V
GND
2
Впоследствии нужно в Arduino IDE отвести библиотеку RCswitch.h
(перекачать её можно после этого https://github.com/sui77/rc-switch/archive/v2.52.zip)
На начала напишем программу передатчика:
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch(); // создаем спинар для работы с под-ком
void setup() {
mySwitch.enableTransmit(2); // говорим программе к какому пину подключен информативный канал
}
void loop() {
mySwitch.send(B0100, 4);
delay(1000);
mySwitch.send(B1000, 4);
delay(1000);
}
Отправитель умеет передавать двойной код, но его значения имеется возможность записывать в десятеричном виде.
mySwitch.send(B0100, 4);
и
mySwitch.send(B1000, 4);
сие команды передачи, mySwitch – сие название передатчика, которое наш брат указали в начале заключение, а send – теплая компания передачи. Аргументами этой функции являются:
имяПередатчика.send(ценность, размер пачки импульсов отправляемых в эстер);
B1000 – чхатра B – значит двучленный, это можно было намарать как цифру 8, т.е. в десятеричном представлении. Кроме один вариант был задокументировать в виде строки (в кавычках) «1000».
После того напишем код интересах приемника (его прошивают в плату, к которой подключен карман):
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
void setup() {
pinMode( 3, OUTPUT );
mySwitch.enableReceive(0);
}
void loop() {
if( mySwitch.available() ){
int value = mySwitch.getReceivedValue();
if( value == B1000 )
digitalWrite( 3, HIGH );
else if( value == B0100 )
digitalWrite( 3, LOW );
mySwitch.resetAvailable();
}
}
Тут. Ant. там мы объявляем, в чем дело? в переменную Value сохраняется принятое смысл в строке mySwitch.getReceivedValue(). А оный факт, что сборник подключен ко 2-му пину описываем на этом месте mySwiitch.enableReceive(0).
В остальном адрес элементарен, если принят предупреждение 0100, то переводим пин штучка 3 в высокое состояние (овраг. единица), а если 1000, в таком случае в низкое (лог. десятая спица).
Интересно:
В строке mySwitch.enableTransmit(0) автор говорим программе, словно ко 2-му пину подключен сборник и включается режим приема. Самые внимательные заметили, чисто аргументом этого метода является без- номер пина «2», а «0», круг обязанностей в том, что схема enableTransmit(число) принимает безвыгодный номер пина, а номерок прерывания, а в atmega328, которую ставят бери Arduino Uno, nano, promini и кортеж других, на втором пине (PortD пин PD2) висит возобновление с номером ноль. Сие увидеть вы можете в распиновке Атмеги применимой к плате ардуино, в розовых квадратиках написаны заезжий дом пинов.
Этот по-свойски передачи и приема до смерти прост и дешев, подходящий приемника и передатчика овчинка выделки стоит на момент написания статьи на глаз 1.5 доллара.
Wi-Fi, адруино и ESP8266
Начнем с того, что-что ESP8266 – сие микроконтроллер с аппаратной поддержкой Wi-Fi, некто продается как в виде отдельной микросхемы, скажем и распаян на плате, так же ардуино. У него 32-битное рема, он программируется вследствие последовательный порт (UART).
Держи платах обычно расположено 2 и больше свободных пина GPIO и веков)) есть пины пользу кого прошивки, это нужно работать через USB to serial переводник. Управляется командами AT, совершенный список команд допускается найти на официальном сайте ESP8266 и получи и распишись github.
Есть и больше интересный вариант, платы NodeMCU, в них проглатывать возможность прошивки за USB, т.к. USB-UART преобразователь еще есть на плате, обыкновенно выполнен на микросхеме CP2102. Node MCU – сие прошивка, что-ведь вроде операционной системы, расчёт на основе скриптового языка Lua.
Прошивка может приводить в исполнение скрипты Lua, как принимая их объединение последовательному порту разве воспроизводя алгоритмы, сохраненные умереть и не встать Flash-памяти.
К месту в ней есть своя файловая дефинитив, правда в ней как не бывало каталогов, т.е. только файлы кроме папок. В памяти могут держаться в не только скрипты, же и различные данные, т.е. абонплата может хранить записанную, как-то, с датчиков, информацию.
Аванс работает с интерфейсами:
-
1-Wire;
-
I2C;
-
SPI;
-
UART.
В ней подчищать целая масса функций:
-
узел шифрования;
-
планировщик задач;
-
ходики реального времени;
-
акт синхронизации часов сверх интернет SNTP;
-
таймеры;
-
АЦП голубая трасса (один);
-
проигрывать аудио файлы;
-
образовывать на выходах ШИМ-апель (до 6);
-
использовать сокеты, принимать поддержка FatFS, т.е разрешается подключать SD-карточки и просто так далее.
А вот быстропроходящий список, с чем может заниматься плата:
-
акселерометры 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.
Сызнова интересно то, яко на сайте https://nodemcu-build.com/ дозволено самому собрать прошивку с нужных модулей, таким образом, вам сэкономите место, исключив с неё ненужные азбука, для своего полезного заключение. И вы можете заполнить эту прошивку сверху любую плату ESP8266.
К тому же использования языка Lua вас можете программировать плату и изо под Arduino IDE.
Выплата ESP8266 может применяться как самостоятельное изготовление, так и модуль интересах беспроводной связи с Arduino.
Трактовка всех функций и особенностей этой платы займет целешенький цикл статей.
В такой мере вот эта амортизация (долга) – это бесподобный вариант дистанционного управления по части Wi-Fi. Сфера применения колоссальная, во использовать смартфон в качестве пульта управления пользу кого самодельной радиоуправляемой машинки неужто квадрокоптера, дистанционное менеджмент освещением, вплоть перед обустройства сетей получай весь дом и быть во главе каждой розеткой, светильником и т.д. всего только бы пинов хватило.
Низший вариант работы с микроконтроллером – сие использование одной платы ESP8266. Дальше приведена схема простейшей wi-fi розетки.
Для того сборки этой кандалы потребуется модуль реле, тож обычное реле подключенное к пину выше транзистор. Для основные положения потребуется программа угоду кому) смартфона RoboRemoFree, (https://www.roboremo.com/). В ней ваш брат настроите подключение к ESP и сделаете интерфейс угоду кому) управления розеткой. Дай вам описать, как ей утилизировать нужно написать отдельную статью, благодаря тому опустим пока сей материал.
В ESP загружаем следующую прошивку, поверх программу ESPlorer (программка для работы с платой)
--WiFi AP Settup
wifi.setmode(wifi.STATIONAP)
cfg={}
cfg.ssid="ESPTEST"
cfg.pwd="1234567890"
wifi.ap.config(cfg)
--Set Pin mode
my_pin_nummber = 1
--gpio.mode(my_pin_nummber, gpio.OUTPUT)
gpio.mode(my_pin_nummber, gpio.OPENDRAIN)
--Create Server
sv=net.createServer(net.TCP)
function receiver(sck, data)
if string.sub (data, 0, 1) == "1" then
--gpio.write(my_pin_nummber, gpio.HIGH)
gpio.write(my_pin_nummber, gpio.LOW)
else
if string.sub (data, 0, 1) == "0" then
--gpio.write(my_pin_nummber, gpio.LOW)
gpio.write(my_pin_nummber, gpio.HIGH)
end
end
print(data)
end
if sv then
sv:listen(333, function(conn)
conn:on("receive", receiver)
conn:send("Hello!")
end)
end
--Create HTTP Server
http=net.createServer(net.TCP)
function receive_http(sck, data)
print(data)
local request = string.match(data,"([^r,n]*)[r,n]",1)
if request == 'GET /on HTTP/1.1' then
--gpio.write(my_pin_nummber, gpio.HIGH)
gpio.write(my_pin_nummber, gpio.LOW)
end
if request == 'GET /off HTTP/1.1' then
--gpio.write(my_pin_nummber, gpio.LOW)
gpio.write(my_pin_nummber, gpio.HIGH)
end
sck:on("sent", function(sck) sck:close() collectgarbage() end)
local response = "HTTP/1.0 200 OKrnServer: NodeMCU on ESP8266rnContent-Type: text/htmlrnrn"..
"<html><title>NodeMCU on ESP8266</title><body>"..
"<h1>NodeMCU on ESP8266</h1>"..
"<hr>"..
"<a href="on">On</a> <a href="off">Off</a>"..
"</body></html>"
sck:send(response)
end
if http then
http:listen(80, function(conn)
conn:on("receive", receive_http)
end)
end
print("Started.")
Днесь вы можете быть во главе программой либо с программы Roboremo, либо от любой веб-браузер, для того этого нужно нанять ip-адрес платы в адресной строке в режиме wi-fi точки дьявол 192.168.4.1.
В коде есть обломок:
"<html><title>NodeMCU on ESP8266</title><body>"..
"<h1>NodeMCU on ESP8266</h1>"..
"<hr>"..
"<a href="on">On</a> <a href="off">Off</a>"..
"</body></html>"
Сие своеобразный ответ, который-нибудь выдаётся браузеру подле обращении к плате. Дьявол содержит HTML-шифр, т.е. простейшую WEB-страницу, аналогичную пирушка, на которой ваша сестра сейчас читаете эту статью.
Вона эта страница, запущенная в браузере смартфона подина управлением ОС Android. Описанное больше не является полноценной инструкцией, беспричинно как это заняло бы громадный объём, если вас интересна эта извещение – пишите комментарии и ты да я обязательно проведем обозрение и напишем статью о работе с ней.
Алексий Бартош
Любите умные гаджеты и DIY? Станьте специалистом в сфере Internet of Things и создайте текстиль умных гаджетов!
Записывайтесь в онлайн-заведение от GeekBrains:
Департамент Интернет вещей
Вам сможете:
-
Изучить C, аппаратура отладки и программирования микроконтроллеров;
-
Взять опыт работы с реальными проектами, в команде и лично;
-
Получить удостоверение и цертификат, подтверждающие полученные багаж.
Starter box для первых экспериментов в подаренье!
После прохождения курса в вашем портфолио закругляйтесь: метостанция с функцией часов и встроенной игрой, распределенная проводка устройств, устройства регулирования температуры (ПИД-контроллер), устройство контроля влажности воздуха, налаженность умного полива растений, приспособление контроля протечки воды…
Ваша сестра получите диплом о профессиональной переподготовке и электронный обязательство, которые можно прибавить в портфолио и показать работодателю.
Подробнее после этого:
Интернет вещей и современные встраиваемые системы