Дистанционное управление микроконтроллером: ИК-пульт, Arduino, ESP8266, 433 мГц

0 61

В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м.

 
          
           Дистaнциoннoe упрaвлeниe микрoкoнтрoллeрoм: ИК-пульт, Arduino, ESP8266, 433 мГц

Ожидание

Сущ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 для первых экспериментов в подаренье!

После прохождения курса в вашем портфолио закругляйтесь: метостанция с функцией часов и встроенной игрой, распределенная проводка устройств, устройства регулирования температуры (ПИД-контроллер), устройство контроля влажности воздуха, налаженность умного полива растений, приспособление контроля протечки воды…

Ваша сестра получите диплом о профессиональной переподготовке и электронный обязательство, которые можно прибавить в портфолио и показать работодателю.

Подробнее после этого:
Интернет вещей и современные встраиваемые системы

Бустер