Электротехнический интернет-журнал Electrik.info

"Электрик Инфо" - онлайн журнал про электричество. Теория и практика. Обучающие статьи, примеры, технические решения, схемы, обзоры интересных электротехнических новинок. Уроки, книги, видео. Профессиональное обучение и развитие. Сайт для электриков и домашних мастеров, а также для всех, кто интересуется электротехникой, электроникой и автоматикой.
 


Схемы подключения | Принципиальные схемы | Электроснабжение
Розетки и выключатели | Автоматы защиты | Кабель и провод | Монтаж электропроводки Ремонт электротехники | Молодому электрику

Электрик Инфо » Устройства автоматики, Схемы на микроконтроллерах » Дистанционное управление микроконтроллером: ИК-пульт, Arduino, ESP8266, 433 мГц
Количество просмотров: 42861
Комментарии к статье: 3


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


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

Дистанционное управление микроконтроллером

Виды

Существует два основных вида дистанционной связи:

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

Беспроводной. В этом варианте не требуется электрического соединения управляющих и исполнительных цепей. В беспроводной схем есть два устройства: передатчик или пульт дистанционного управления (ПДУ) и приемник, который входит в состав управляемой цепи. Беспроводное управление в свою очередь распространено в двух вариантах:

  • По оптическому сигналу. Такие системы есть в каждом доме, так вы управляете работой телевизора, кондиционера и другой бытовой техники.

  • По радиосигналу. Здесь уже целый ряд вариантов: Bluetooth, ZigBee, Wi-Fi, приемники-передатчики 433 мГц и другие вариации на эту тему.

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

ИК-пульт

Начнем рассмотрение с самого простого и классического варианта. Управление устройством путем передачи кода из последовательности мерцаний ИК-светодиода в оптоприемник, установленный на устройстве. Стоит отметить, что ИК-спектр не видим для человеческого глаза, но его видит большинство фото-видео камер.

Раз уж большинство камер видит ИК-излучение, так вы можете проверять исправность пультов дистанционного управления. Для этого просто направьте пульт так, чтобы излучатель смотрел в камеру и понажимайте кнопки. Обычно на экране видно белое свечение с фиолетовым отливом.

У такого управления есть очевидный недостаток – вы должны направлять пульт в сторону приемника. А если батарейки в пульте севшие, то приходится еще и целится, так как срабатывания становятся всё реже и реже.

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

Типовой датчик выглядит следующим образом. Так как происходит прием оптического сигнала, необходимо исключить срабатывания от посторонних источников света, таких как солнце, лампы освещения и прочие. Также стоит отметить то, что ИК-сигнал принимается в основном на частоте в 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();

    }

}

Здесь мы объявляем, что в переменную 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.

ESP8266

Есть и более интересный вариант, платы NodeMCU, в них есть возможность прошивки по USB, т.к. USB-UART преобразователь уже есть на плате, обычно выполнен на микросхеме CP2102. Node MCU – это прошивка, что-то вроде операционной системы, проект на основе скриптового языка Lua.

Плата NodeMCU

Прошивка может выполнять скрипты Lua, как принимая их по последовательному порту или воспроизводя алгоритмы, сохраненные во Flash-памяти.

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

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

  • 1-Wire;

  • I2C;

  • SPI;

  • UART.

В ней есть целая масса функций:

  • модуль шифрования;

  • планировщик задач;

  • часы реального времени;

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

  • таймеры; 

  • АЦП канал (один);

  • проигрывать аудио файлы;

  • формировать на выходах ШИМ-сигнал (до 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.

Еще интересно то, что на сайте https://nodemcu-build.com/ можно самому собрать прошивку из нужных модулей, таким образом, вы сэкономите место, исключив из неё ненужные элементы, для своего полезного кода. И вы можете залить эту прошивку на любую плату ESP8266.

Кроме использования языка Lua вы можете программировать плату и из под Arduino IDE.

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

Модуль для беспроводной связи с Arduino

Рассмотрение всех функций и особенностей этой платы займет целый цикл статей.

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

Простейший вариант работы с микроконтроллером – это использование одной платы ESP8266. Ниже приведена схема простейшей wi-fi розетки.

Схема простейшей 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 OK\r\nServer: NodeMCU on ESP8266\r\nContent-Type: text/html\r\n\r\n"..

     "<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

Вот эта страница, запущенная в браузере смартфона под управлением ОС Android. Описанное выше не является полноценной инструкцией, так как это заняло бы огромный объём, если вам интересна эта информация – пишите комментарии и мы обязательно проведем обзор и напишем статью о работе с ней.

Алексей Бартош

Популярные публикации:

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

Подпишитесь на наш канал в Телеграм "Автоматика и робототехника" (современные технологиии, инновации и будущее автоматизации). Нажмите на ссылку ниже и будьте в центре событий в мире автоматики: Автоматика и робототехника 



Поделитесь этой статьей с друзьями:


Другие статьи с сайта Электрик Инфо:

  • Как подключить Arduino к компьютеру, смартфону, интернету
  • Подключение и программирование Ардуино для начинающих
  • Способы чтения и управления портами ввода-вывода Arduino
  • Что такое дисплеи Nextion и как с ними работать?
  • Микроконтроллеры программируемые на JavaScript: какой выбрать, характеристи ...
  • Ардуино и шаговый двигатель: основы, схемы, подключение и управление
  • Виды и устройство микроконтроллеров AVR
  • Как с помощью Ардуино безопасно управлять нагрузкой на напряжении 220 вольт
  • Управление двигателями и сервоприводами с помощью Ардуино
  • Новая плата Arduino Nano RP2040 Connect
  • Категория: Устройства автоматики, Схемы на микроконтроллерах

      Комментарии:

    #1 написал: MercuryKira |

    Автор вообще подключал есп и реле, уверен что нет. Так как 5 вольтовое реле как не подключай к есп, работать оно не будет. Ибо выход с пинов есп 3.3 вольта.

      Комментарии:

    #2 написал: Сергей |

    Очень интересная и полезная статья. Спасибо!

      Комментарии:

    #3 написал: Алексей |

    Способы дистанционного управления микроконтроллером могут быть различными и зависят от конкретной задачи и условий эксплуатации. Некоторые из наиболее распространенных способов дистанционного управления включают в себя использование радиочастотных (RF) сигналов, инфракрасных (IR) лучей, Bluetooth, Wi-Fi и GSM/GPRS сетей.

    Радиочастотное управление использует радиоволны для передачи команд на микроконтроллер. Этот метод обычно используется для управления устройствами на небольших расстояниях, например, для управления игрушками или бытовой техникой.

    Инфракрасное управление использует инфракрасные лучи для передачи команд на микроконтроллер. Этот метод также обычно используется для управления устройствами на небольших расстояниях и может быть использован, например, для дистанционного управления телевизором. Bluetooth и Wi-Fi управление позволяет управлять устройствами на больших расстояниях через интернет. Эти методы обычно используются для управления умными домами и другими устройствами, которые требуют удаленного доступа.

    GSM/GPRS управление использует сотовые сети для передачи команд на микроконтроллер. Этот метод позволяет управлять устройствами в любой точке мира, где есть доступ к сотовой связи.

    Независимо от выбранного метода дистанционного управления, важно убедиться, что используемая технология подходит для конкретной задачи и обеспечивает необходимую безопасность и надежность управления.

    Присоединяйтесь к нам в социальных сетях:

    ВКонтакте | Facebook | Одноклассники | Электрик Инфо на Яндекс Дзен

     

    Популярные разделы сайта:

    Электрика дома  Электрообзоры  Энергосбережение
    Секреты электрика Источники света Делимся опытом
    Домашняя автоматика Электрика для начинающих
    Практическая электроника Электротехнические новинки
    Андрей Повный - все статьи автора



    Copyright © 2009-2024 Электрик Инфо - Electrik.info, Андрей Повный
    Вся информация на сайте предоставлена в ознакомительных и познавательных целях.
    За применение этой информации администрация сайта ответственности не несет.
    Перепечатка материалов сайта запрещена.