Модуль sim800 ардуино управление через реле

Модуль sim800, управление двумя реле с телефона.

Приветствую всех на своём канале. Сегодня мы продолжим наше знакомство с модулем SIM800L и научимся управлять блоком из двух реле удалённо при помощи телефона. Можно подключить любое количество нагрузок, но это я покажу в следующих видео. Для примера я к каждому реле подключил по лампе, а вы можете подключить всё что угодно. Что бы включить или выключить лампы достаточно позвонить на номер телефона и нажать на запрограммированную цифру. Я сделал так что если нажать на  цифру в первый раз, то лампа включится, а если ещё раз, то выключиться. Можно было бы сделать что нажав  цифру 1, первая лампа загорится, а нажав 2 выключится, нажав 3 включатся все лампы, нажав 4 все погаснут. Всё это можно сделать немного изменив скетч, но этим мы займёмся в других видео. Так же можно сделать, что модуль будет принимать звонки только с определённых номеров, или управлять длительностью нажатия на клавишу телефона. Это я расскажу в других видео, конечно если вам это будет интересно. Так, что не забывайте подписываться и оставляйте свои комментарии. 

Это второе видео из серии про этот модуль. Если вы не смотрели первое, то лучше начните с него. Там я рассказывал о подключении и настройках модуля с помощью AT команд. Посмотреть его можно по ссылке что вы видите на экране сверху справа.
Ну вроде вступление закончено и теперь можно переходить к описанию работы примера.

Нам понадобятся 2 реле, Ардуино и конечно GSM модуль SIM800L. Как я уже говорил к реле я подключил 2 лампы. Вот схема подключения.
А так выглядит скетч, но о том как он работает я расскажу дальше в видео. Что бы лучше понять как всё работает я открою монитор порта и буду сразу по ходу объяснять что происходит в модуле и какие команды он принимает и отдаёт.
Для начала всегда надо инициализировать модуль командой AT. Это надо для настройки скорости обмена данными.
Командой AT+DDET=1 Мы включение режим DTMF, то есть режим тонального набора. Для всех команд вы должны получить ответ OK.
Теперь давайте позвоним на модуль и посмотрим как он работает и какие команды принимает.
Сначала идёт команда RING это означает, что проходит входящий голосовой вызов.
Команда CLIP это АОН и он показывает номер телефона звонящего абонента.
ATA это ответ на входящий звонок. У вас так же должен быть ответ OK.

Теперь поуправляем нашим реле. Для начала нажмём на телефоне единицу. Видим что пришла команда тонального набора со значением 1 и первая лампа загорелась. Иногда это происходит с небольшой задержкой, но задержки больше 2 секунд у меня не было.
Нажав ещё раз на цифру 1 мы погасим лампу. Как я уже говорил можно было для включения и выключения назначить разные цифры.
Проделаем то же самое для второй лампы. Нажав двойку один раз мы включили лампу, нажав ещё раз, выключили.
Немного поиграемся и перейдём дальше.

Теперь на телефоне разорвём соединение. В ответ получим команду NO CARIER и команду ATH означающую Разъединение голосового вызова.
Позвонив ещё раз снова получаем RING  и ответ от встроенного АОНа. Все телефоны я замылил, а то и так от спамеров нет отбоя. А как вы спасаетесь от надоедливых звонков?
Схема соединения модуля реле, Ардуино и GSM модуля очень простая и поэтому я её просто показываю без объяснений. Если что не понятно, то пересмотрите предыдущее видео. А мы переходим к описанию работы скетча.

Описание работы скетча.
Для работы нам понадобится интерфейс для работы с интерфейсом UART. В Ардуино реализована аппаратная поддержка интерфейса на выходах 0 и 1 которые также используются для связи с компьютером по USB. Это нам не подойдёт, поэтому мы воспользуемся библиотекой SoftwareSerial которая позволяет реализовать последовательный интерфейс на любых цифровых выводах Ардуино. Я использовал выходы 10 и 11.
Реле я подключил к выходам 2 и 3 Ардуино. Так как мои реле управляются низким уровнем(LOW), поэтому я установил по умолчанию высокий уровень(HIGH), тем самым отключил их при включении. 
Эти глобальные переменные понадобятся для дальнейшей работы скетча.
Перед началом работы делаем задержку в 5 секунд что бы дать время GSM модулю найти сеть и подключиться к ней. Так как этот код находится в SETUP, то он срабатывает всего 1 раз и это никак не отражается на дальнейшей работе скетча.
Даём команды AT для настройки скорости и переводим модуль в тональный режим. Небольшие паузы нужны для того чтобы модуль принял команды и передал нам ответ в виде OK. Которые мы и видим в мониторе порта.
Ну и теперь самое интересное, работа с интерфейсом UART
Считываем все пришедшие команды и записываем их в переменную buff.
Если установлено соединение, то функцией indexoff() ищем совпадение. В конкретном случаем ищем +DTMF:
После того как нашли отрезаем пробелы вначале и в конце и передаём получившееся в функцию STATE(). В остатке у нас буде цифра с телефона, в нашем случае 1 или 2.
Если на телефоне повесили трубку, то придёт команда NO CARRIER. В ответ на неё мы командой ATH вешаем трубку, то есть разрываем соединение.
Эта команда проверяет есть ли входящий звонок, и если есть то снимает трубку и готовится к приёму команд или голосовых сообщений.

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

В следующих видео я покажу как подключать различные датчики, получать с них данные и отправлять в виде СМС на телефон. Это будут датчик движения, температуры, протечки и возможно каких-нибудь ещё.

Пишите в комментариях какие ещё датчики хотели бы увидеть, постараюсь сделать про них тоже.
 

Скетчи