Віримо в перемогу ЗСУ!
Працюємо з 09:00 до 18:00 Пн-Пт

Пропоную вашій увазі приклад простого застосування можливостей 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 размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Перетворювач рівнів 5В на 3В двонапрямлений 4-канальний

Перетворювач рівнів 5В на 3В двонапрямлений 4-канальний

Перетворювач логічних рівнів з 5 В на 3,3 В та навпаки.Дозволяє перетворити 4 лінії комунікаціїДуже ..

20.29грн.

Аудіо штекер 3,5мм папа з гвинтовим клемником

Аудіо штекер 3,5мм папа з гвинтовим клемником

Стерео штекер 3,5 мм для монтажу електричних кіл передачі звукового сигналу за допомогою гвинтового ..

90.29грн.

Стійка нейлонова М3 12мм + 6мм

Стійка нейлонова М3 12мм + 6мм

Стійка для кріплення усіляких електронних модулів до корпусу пристроюВисота стійки 12 ммДовжина зовн..

4.97грн.

Фільтрація шумів аналогового сигналу

Фільтрація шумів аналогового сигналу

Шум аналогового входу Будь-який аналоговий датчик, з'єднувальні дроти, та і сам аналоговий вхід кон..

Двигун 12В з редуктором 150RPM двохсторонній

Двигун 12В з редуктором 150RPM двохсторонній

Двигун постійного струму з потужним черв'ячним редуктором для використання в різноманітній робототех..

558.37грн.