Предлагаю вашему вниманию пример простого применения возможностей SIM800 при исходящем звонке. В результате выполнения команды ATD, модем возвращает строковый ответ, в зависимости от поведения принимающей стороны. Так вот я и хочу использовать эти ответы для управления двумя реле. Сценарий такой: SIM800 под управлением контроллера по какому-то событию звонит хозяину на мобильный. И, если хозяин поднимает трубку телефона и ложит её, то кратковременно срабатывает одно реле, включая какой-либо исполнительный механизм. А, если же хозяин сразу сбрасывает вызов, то контроллер кратковременно включит второе реле.

Для этого проекта я беру готовый модуль под Arduino Nano плюс SIM800L с двумя реле на борту нашей разработки. 

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


Я по-быстрому набросал эту программку в Arduino IDE, взяв за основу программные блоки, которые мы делали в предыдущих видео. В секции setup сначала определяются пины контроллера Arduino Nano как выходы. Они будут управлять двумя реле. 

Затем идут две строки подключения физического порта UART для диагностики. А так же программного UART для коммуникации с SIM800L.

Дальше ожидание 10 секунд для того, чтобы SIM800 успела подключиться к сети GSM.

Следующая строка не обязательная. Пять раз отправляем команду AT. Просто для определения модемом скорости обмена данными по порту UART.

После простоя в одну секунду активируется команда набора номера мобильного хозяина.

Дальше в цикле loop считываются ответы SIM800 в строковую переменную txt.

После чего стоят два условия: если в ответе есть словосочитание NO CARRIER, то выставляется единица на выходе 7 и включается первое реле; если в ответе есть слово BUSY, то единица выставляется на выходе 8 и включается второе реле.

NO CARRIER – это когда звонок приняли и положили трубку.

А BUSY – это когда сразу сбросили вызов не поднимая трубку.

Дальше в программе через 2 секунды выходы сбрасываются на ноль и реле выключаются.

#include <SoftwareSerial.h>

SoftwareSerial SIM800serial (2, 3);

#define OK 1
#define NOTOK 2
#define TIMEOUT 3

void setup() {
  pinMode(7, OUTPUT); //relay1
  pinMode(8, OUTPUT); //relay2
  
  Serial.begin(9600);
  SIM800serial.begin(9600);
  delay(10000);
  SIM800command("AT", "OK", "ERROR", 500, 5);
  delay(1000);
  SIM800command("ATD+380683609382;", "OK", "ERROR", 1000, 1);
}

void loop() {
  String txt;
  txt = SIM800read();
  if (txt.indexOf("NO CARRIER") > 0){
    digitalWrite(7, HIGH);
  }
  if (txt.indexOf("BUSY") > 0){
    digitalWrite(8, HIGH);
  }
  delay(2000);
}
digitalWrite(7, LOW); digitalWrite(8, LOW); byte SIM800command(String command, String response1, String response2, uint16_t timeOut, uint16_t repetitions) { byte returnValue = NOTOK; byte countt = 0; while (countt < repetitions && returnValue != OK) { SIM800serial.println(command); if (SIM800waitFor(response1, response2, timeOut) == OK) { returnValue = OK; } else {returnValue = NOTOK;} countt++; } return returnValue; } byte SIM800waitFor(String response1, String response2, uint16_t timeOut) { uint16_t entry = 0; uint16_t count = 0; String reply = SIM800read(); byte retVal = 99; do { reply = SIM800read(); delay(1); entry ++; } while ((reply.indexOf(response1) + reply.indexOf(response2) == -2) && entry < timeOut ); if (entry >= timeOut) { retVal = TIMEOUT; } else { if (reply.indexOf(response1) + reply.indexOf(response2) > -2) retVal = OK; else retVal = NOTOK; } return retVal; } String SIM800read() { String reply = ""; if (SIM800serial.available()) { reply = SIM800serial.readString(); } if (reply!=""){ Serial.print("Reply: "); Serial.println(reply); } return reply; }

Загружаю программу в контроллер и запускаю монитор порта.

Через 10 секунд после включения или перезагрузки контроллера получаю звонок на мобильный. Подымаю трубку и вешаю её. То есть вызов принят. Контроллер получает ответ NO CARRIER от SIM800 и делает вывод, что надо на 2 секунды включить реле, управляемое выходом номер 7.

Теперь перезапускаю монитор порта, чтобы перегрузить контроллер и проверить управление вторым реле.

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

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

Желаю вам крепкого здоровья, и увидимся в следующем видео!

<< Проекты << Все товары >> Статьи, уроки >>

Написать отзыв

Примечание: HTML разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Ультразвуковой датчик расстояния HC-SR04 для Arduino, ESP32, STM32

Ультразвуковой датчик расстояния HC-SR04 для Arduino, ESP32, STM32

HC-SR04 — это популярный ультразвуковой датчик для точного измерения расстояния в диапазоне от 2 до ..

62.06грн.

Драйвер двух коллекторных двигателей L298N

Драйвер двух коллекторных двигателей L298N

Модуль драйвера L298N для управления работой одного двухполюсного высокооммного шагового двигат..

105.58грн.

Стерео усилитель мощности 15Втх2 на TDA7297

Стерео усилитель мощности 15Втх2 на TDA7297

Двухканальный усилитель звуковой частоты на основе микросхемы TDA7297Имеет защиту от перегрузки..

125.21грн.

ESP32 или Arduino: что выбрать для вашего проекта?

ESP32 или Arduino: что выбрать для вашего проекта?

ESP32 или Arduino: что выбрать для вашего проекта? Коротко: если вам нужен современный Wi-Fi/Blue..

Модуль двух кнопок 50x25мм

Модуль двух кнопок 50x25мм

Две кнопки 12х12мм на плате с отверстиями под крепление.Включать в цепь можно при помощи пайки или ч..

54.77грн.