Бюджетная GSM сигнализация с мозгами из Arduino


Добрый день! Опять мультиобзор китайских электронных компонентов, как обычно обо всём понемногу, постараюсь покороче, но получится ли? Итак, встречайте, GSM сигнализация стоимостью до 700 ₽. Интересно? Прошу под «cut»!

Приступим! Перед началом рекомендую заглянуть в этот обзор, меньше компонентов и большая автономность. Итак, «техзадание», основные требования к сигнализации:

1) Оповещать о срабатывании датчика открытия двери.
2) В случае отключения питания должна быть предусмотрена некоторая автономность.
3) Управление сигнализацией через sms и звонки.

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

Перечень того что понадобится:

1. «Герой обзора» — Arduino Nano v3 — 150 ₽.
2. GSM Модуль — M590e — 110 ₽.
3. Повышающий DC преобразователь — MT3608 — 35 ₽.
4. Контроллер заряда-разряда для Li-ion аккумулятора — TP4065 — 25 ₽.
5. Разъём для подключения питания — XT60 — 2 шт * 25 ₽ = 50 ₽.
6. Светодиод RGB с общим анодом — 1шт * 5 ₽.
7. Диоды E027 — 2 шт * 1 ₽ = 2 ₽.
8. Герконовый датчик — 70 ₽.
9. Резисторы 10 кОм — 10 ₽.
10. Выключатель — 15 ₽.
11. Разъём для подключения датчика — JST SM — 10 ₽.
12. PowerBank 6 x 18650 — 160 ₽.
13. Аккумулятор 18650 — из личных запасов.
14. Зарядное устройство 5В 1А — из личных запасов.



*12 — На фото PowerBank 4 x 18650, если постараться, то можно и в него всё вместить.

Начнём. Все ключевые моменты и возможные «подводные камни» выделены жирным шрифтом.

Мозгами будет Arduino Nano v3 неоднократно рассмотренная на этом ресурсе.

В качестве корпуса послужит четырёх — шестибаночный PowerBank, все его внутренности вынимаем, они нам не понадобятся. Так как эти корпусы «одноразовые», для того чтобы его потом открыть, необходимо немного спилить все зубцы на защёлках.

Модем и его настройка. Обзор на него написал товарищ mitel. Добавлю от себя что это очень капризный модем, если учесть что он ещё и бывший в употреблении то из плюсов остаётся лишь его цена. Для того чтобы модем запустился при подаче питания необходимо вывод BOOT надо замкнуть на GND через резистор на 10 кОм или между вторым и третьим пином модуля впаять SMD резистор такого же номинала, маркировка 103.

Теперь начинается самое интересное, настройка модема. Из-за того что модуль б/у и настройки у всех модулей разные, нужно подключить модем через USB-UART конвертер и определить опытным путём какая скорость порта установлена в модеме. SIM-карту из модема необходимо извлечь для меньшего энергопотребления. Подключается так:

USB-UART <---> Modem m590e
GND <->GND
VCC <-> 5V
TXO <-> RXD
RXI <-> TXD

Подключаем к USB порту компьютера, устанавливается драйвер. В диспетчере устройств должно появиться что-то подобное:

Запускаем программу Putty, выбираем тип соединения «Serial» прописываем номер COM порта, в моём случае 5, и скорость 9600.
Возможные значения скорости: 2400,4800,9600,14400,19200,28800,38400,57600,115200,230400,460800. Часто используемые значения: 9600,14400,19200,28800,38400,57600.

Нажимаем кнопку «Open» и отключаем пин GND от модема. Примерно через секунду подключаем обратно и если видим в консоли подобные «каракули»:

закрываем программу, запускаем снова. В поле скорость порта «Speed» меняем значение на следующее (14400) из возможных и повторяем эти операции до тех пор, пока не увидим в консоли строку:

Отлично! Теперь необходимо модему сообщить что в дальнейшем мы с ним будем «общаться» на скорости 9600, для этого в консоли вводим команду:
AT+IPR=9600
и нажимаем «Enter». Видим следующее:

Закрываем программу и подключаемся снова, указываем номер порта и скорость уже 9600.
Если выполнить команду
ATI
то увидим информацию о прошивке и модели модема.

На этом настройка модема завершена.

Для питания от сети используем 5 V 1-2 А зарядное устройство от телефона. Лучше не использовать непонятные дешевые китайские зарядники, а взять что-то понадёжнее. Так же необходимо сделать источник бесперебойного питания на случай отключения сетевого питания. Подключать будем так:

При наличии сетевого питания ардуина и модем питаются от блока питания, если сетевое питание отключается устройство запитывается от аккумулятора 18650. При подаче сетевого питания начинается зарядка аккумулятора. Аккумулятора емкостью 2000 mAh хватает примерно на сутки бесперебойной работы.
Фото






Источник питания готов.

Подключение к Arduino светодиода и герконового датчика.


Подключение модема.
Модем <---> Arduino
TXD <->D8
RXD <->D9
Модем <---> MT3608
5V <->VOUT+
GND<->VOUT-

Подключение светодиода. Светодиод с общим анодом. Отличные, очень яркие светодиоды.
Светодиод <---> Arduino
R <-> D10
G <-> D12
B <-> D11
Anode <-> VIN

Подключение герконового датчика.
Герконовый датчик <---> Arduino
Контакт 1 <-> VIN
Контакт 2 <-> D6
Так же D6 надо замкнуть на GND через резистор на 10 кОм.

После МТ3608 стоит выключатель в разрыве плюсового контакта питания, на случай если понадобится перезагрузить Arduino с модемом.

Фото







Готовое устройство в сборе.

* В этом устройстве не использовал разъёмы XT60 и JST SM так как они задержались в пути, заменил их аналогичными :) В принципе можно и без них обойтись, но так удобнее отключать сигнализацию от датчика и сети питания. Да и XT60 не совсем подходит для 220В, уж очень близко контакты, но другого ничего не нашел.
Крепим датчик. Магнит вешаем на дверь, датчик на коробку. На датчике и на магните уже присутствует двухсторонняя липкая лента, держится он хорошо, если есть желание можно прикрутить шурупами, они присутствуют в комплекте. Датчик срабатывает уже на расстоянии 4 — 5 сантиметров, ложных срабатываний не наблюдалось.

Фото




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

В файл SoftwareSerial.h (C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SoftwareSerial\src\SoftwareSerial.h) необходимо внести изменения

было так:

#define _SS_MAX_RX_BUFF 64 

стало так:

#define _SS_MAX_RX_BUFF 192

Неактуальная версия прошивки сигнализации.
Список изменений. Скетч от 02.12.2016 финальный открытый скетч, в дальнейшем изменения в этот скетч вноситься не будут, за исключением исправления выявленных ошибок. В дальнейшем все прошивки будут выкладываться в виде бинарного файла.
Скетч от 18.11.2016. Добавлена sms — команда запроса баланса Money и добавлен тревожный пин (описание в скетче). Занято 73% ОЗУ;

Скетч от 19.11.2016. Теперь sms — команды не чувствительны к регистру (Info=InFo=INFo=infO). Оптимизация памяти — занято 55% ОЗУ;

Скетч от 23.11.2016. Добавлен инверсный тревожный пин. Настройки которые могут быть изменены с помощью sms — команд теперь сохраняются при отключении питания устройства. Добавлена команда Reset — сброс на «заводские» установки. Занято 56% ОЗУ;

Скетч от 24.11.2016. Исправлены некоторые ошибки. Снятие с охраны и постановка на охрану теперь так же сохраняются после отключения питания устройства. Занято 56% ОЗУ;

Скетч от 02.12.2016. Исправлен баг SYSTEM:AUTO GUARD ON. Теперь команда SmsOff работает правильно. Команда Clear заменена командой ClearSms. Команда Reset заменена командой ResetConfig. Занято 54% ОЗУ;

Скетч от 02.12.2016

#include <SoftwareSerial.h>
#include <EEPROM.h>

SoftwareSerial mySerial(8, 9); //На этих пинах подключен модем RX, TX
#define RLed 10 // Красный светодиод
#define BLed 11 // Синий светодиод
#define GLed 12 // Зеленый светодиод
#define AlarmPin 4 // Выход "тревожного" пина, при срабатывании датчика на этом пине устанавливается сигнал высокого уровня на время указанное в переменной AlarmInterval, по умолчанию 60 секунд.
#define InverseAlarmPin 5 // Инверсный выход "тревожного" пина, при срабатывании датчика на этом пине устанавливается сигнал низкого уровня на время указанное в переменной AlarmInterval, по умолчанию 60 секунд.
#define DoorPin 6 // Номер входа, подключенный к датчику
int8_t DoorState = 0; // Переменная для хранения состояния датчика
int8_t DoorFlag = 1;

int8_t RLedState = LOW;
int8_t GLedState = LOW;
int8_t BLedState = LOW;


unsigned long previousAlarmMillis = 0;
uint16_t AlarmInterval = 60; // Секунд до отключения "тревожного" пина.

unsigned long previousMillis = 0;
uint16_t interval = 100;

uint8_t PauseTime = 15; // Время, указывается в минутах, на которое сигнализация должна засыпать при получении смс команды Pause.

uint8_t ch = 0;
int8_t sendsms = 1; //Отправка смс: 1 - включена, 0 - выключена. Глобальный параметр отправки сообщений. Управляется через смс командами SmsOn и SmsOff.
int8_t AlarmRing = 1; //Звонок: 1 - включен, 0 - выключен. Звонить на первый номер массива AlarmPhone при срабатывании датчика. Управляется через смс командами RingOn и RingOff.
int8_t guard = 1; //Охрана: 1 - включена, 0 - выключена. Если включена, будут отправляться смс при срабатывании датчиков
int8_t sendsmscaller; //Переменная для отправки смс о снятии или установки на охрану пользователям которые отсутствуют в массиве AlarmPhone
int8_t LedTestOn = 0;
int8_t LedOn = 1;

String BalanceNumber = "#100#"; //Команда запроса баланса. #100# - ответ латинскими буквами, *100# - ответ русскими буквами. Работает только с латинскими буквами. В данном случае команда запроса баланса Beeline(Россия).
uint8_t BalanceStringLen = 22; //Число символов от начала строки которые нужно переслать в смс сообщении при получении USSD ответа о балансе. Убираем спам от оператора при запросе баланса, особо критично для модема M590, обрезаем всё лишнее.

String val = "";
String RingPhone = "";
String LastEvent = "System -> guard ";

int8_t ModemID = 0;

const char* AllowPhone[] = {"70001234501", "70001234502", "70001234503", "70001234504", "70001234505"}; //Номера которым разрешено управлять охраной. На первый номер будут отправляться смс монитора порта (для отладки)
int8_t CountPhone = sizeof(AllowPhone) / sizeof(AllowPhone[0]);

const char* AlarmPhone[] = {"70001234501", "70001234502"}; //Номера для отправки смс при срабатывании датчиков и о снятии или установки на охрану. На первый номер будет осуществляться вызов если AlarmRing = 1;
int8_t CountAlarmPhone = sizeof(AlarmPhone) / sizeof(AlarmPhone[0]);


/*
  EEPROM Data:
  № ячейки - значение;
  0 - если записана не 1, то необходимо затереть часть памяти eeprom'a и восстановить стандартную конфигурацию.
  10 - sendsms = 1; //Отправка смс: 1 - включена, 0 - выключена. Глобальный параметр отправки сообщений. Управляется через смс командами SmsOn и SmsOff.
  11 - AlarmRing = 1; //Звонок: 1 - включен, 0 - выключен. Звонить на первый номер массива AlarmPhone при срабатывании датчика. Управляется через смс командами RingOn и RingOff.
  12 - LedTestOn = 0;
  13 - LedOn = 1;
  14 - guard =1; //Охрана: 1 - включена, 0 - выключена. Если включена, будут отправляться смс при срабатывании датчиков
*/
void setup() {

  Serial.begin(9600);

  //EEPROM.update(0, 255); //reset config;
  eepromconfig();

  pinMode(RLed, OUTPUT);
  pinMode(GLed, OUTPUT);
  pinMode(BLed, OUTPUT);
  digitalWrite(RLed, HIGH);
  digitalWrite(GLed, HIGH);
  digitalWrite(BLed, HIGH);

  digitalWrite(RLed, LOW);
  delay(500);
  digitalWrite(RLed, HIGH);
  digitalWrite(GLed, LOW);
  delay(500);
  digitalWrite(GLed, HIGH);
  digitalWrite(BLed, LOW);
  delay(500);
  digitalWrite(BLed, HIGH);

  pinMode(DoorPin, INPUT);

  pinMode(AlarmPin, OUTPUT);
  digitalWrite(AlarmPin, LOW);
  pinMode(InverseAlarmPin, OUTPUT);
  digitalWrite(InverseAlarmPin, HIGH);

  InitModem();
}

void loop() {
  if (LedTestOn == 0) digitalWrite(BLed, HIGH);
  if (LedTestOn == 1) LedTest();
  Led();
  AlarmPinOff();
  Detect();
  if (mySerial.available()) {
    while (mySerial.available()) { 
      ch = mySerial.read();
      val += char(ch);
      delay(20);
    }
    if (val.indexOf("+PBREADY") > -1) InitModem();
    if (val.indexOf("RING") > -1) { 
      if (CheckPhone() == 1) {
        mySerial.println("ATH0");
        sendsmscaller = 1;

        MasterRing();
      } else {

        mySerial.println("ATH0"); 
      }
    } else if (val.indexOf("+CMT:") > -1) {  
      if (CheckPhone() == 1) {
        sendsmscaller = 1;
        MasterSms();
      }
    } else if (val.indexOf("+CUSD:") > -1) { 

      Serial.println(RingPhone);
      Serial.println(val);
      if (val.indexOf("\"") > -1) {
        sms(String(val.substring(String(val.indexOf("\"")).toInt() + 1, String(val.indexOf("\"")).toInt() + BalanceStringLen)), String("+" + RingPhone));
        delay(1000);
      }
      mySerial.println("AT+CUSD=0");
      delay(200);
    } else
      Serial.println(val); 
    val = "";
  }
  if (Serial.available()) { 
    while (Serial.available()) { 
      ch = Serial.read();
      val += char(ch);
      delay(20);
    }
    mySerial.println(val);
    ConsolePrint();
    val = "";  
  }
}

void eepromconfig() {
  pinMode(13, OUTPUT);
  if (EEPROM.read(0) != 1) {
    for (int i = 0 ; i < 20 ; i++) {
      EEPROM.update(i, 255);
      delay(10);
    }
    EEPROM.update(10, 1);  // sendsms = 1; //Отправка смс: 1 - включена, 0 - выключена. Глобальный параметр отправки сообщений. Управляется через смс командами SmsOn и SmsOff.
    EEPROM.update(11, 1);  // AlarmRing = 1; //Звонок: 1 - включен, 0 - выключен. Звонить на первый номер массива AlarmPhone при срабатывании датчика. Управляется через смс командами RingOn и RingOff.
    EEPROM.update(12, 0);  // LedTestOn = 0;
    EEPROM.update(13, 1);  // LedOn = 1;
    EEPROM.update(14, 1); //Охрана: 1 - включена, 0 - выключена. Если включена, будут отправляться смс при срабатывании датчиков
    EEPROM.update(0, 1);
    digitalWrite(13, HIGH);
  }
  if (EEPROM.read(0) == 1) {
    sendsms = EEPROM.read(10);  // sendsms = 1; //Отправка смс: 1 - включена, 0 - выключена. Глобальный параметр отправки сообщений. Управляется через смс командами SmsOn и SmsOff.
    AlarmRing = EEPROM.read(11);  // AlarmRing = 1; //Звонок: 1 - включен, 0 - выключен. Звонить на первый номер массива AlarmPhone при срабатывании датчика. Управляется через смс командами RingOn и RingOff.
    LedTestOn = EEPROM.read(12);  // LedTestOn = 0;
    LedOn = EEPROM.read(13);  // LedOn = 1;
    guard = EEPROM.read(14); //Охрана: 1 - включена, 0 - выключена. Если включена, будут отправляться смс при срабатывании датчиков
    if (guard == 1) LastEvent = LastEvent + "on";
    if (guard == 0) LastEvent = LastEvent + "off";
  }
}

void InitModem() {
  delay(2000);
  Serial.begin(9600); 
  mySerial.begin(9600);
  mySerial.println("AT");
  delay(100);
  mySerial.println("ATI");
  delay(100);
  if (mySerial.find("M590")) ModemID = 1;
  mySerial.println("ATI");
  delay(100);
  if (mySerial.find("SIM800")) ModemID = 2;
  delay(100);
  mySerial.println("AT+CLIP=1");
  delay(100);
  mySerial.println("AT+CMGF=1"); 
  delay(100);
  mySerial.println("AT+CSCS=\"GSM\"");
  delay(100);
  mySerial.println("AT+CNMI=2,2");
  delay(100);
}

int CheckPhone() {
  for (int i = 0; i < CountPhone; i++) {
    if (val.indexOf(AllowPhone[i]) > -1) {
      RingPhone = AllowPhone[i];
      Serial.println("Event: +" + RingPhone);
      return 1;
    }
  }
  return 0;
}

void Detect() {
  DoorState = digitalRead(DoorPin);
  if (DoorState == LOW && DoorFlag == 0) {
    DoorFlag = 1;
    delay(100);
    if (LedOn == 1) digitalWrite(GLed, LOW);
    Alarm();
  }
  if (DoorState == HIGH && DoorFlag == 1) {
    DoorFlag = 0;
    delay(100);
  }
}

void Led() {
  if (guard == 1) {
    digitalWrite(GLed, HIGH);
    digitalWrite(RLed, LOW);
  }
  if (guard == 0) {
    digitalWrite(RLed, HIGH);
    if (LedOn == 1) digitalWrite(GLed, LOW);
  }
}

void LedTest() {
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis > interval) {
    previousMillis = currentMillis;
    if (RLedState == LOW)
      RLedState = HIGH;
    else
      RLedState = LOW;
    digitalWrite(BLed, RLedState);
  }
}

void AlarmPinOff() {
  unsigned long currentAlarmMillis = millis();
  if (currentAlarmMillis - previousAlarmMillis > AlarmInterval * 1000) {
    digitalWrite(AlarmPin, LOW);
    digitalWrite(InverseAlarmPin, HIGH);
  }
}

void Alarm() {
  if (guard == 1) {
    digitalWrite(AlarmPin, HIGH);
    digitalWrite(InverseAlarmPin, LOW);
    previousAlarmMillis = millis();
    for (int i = 0; i < CountAlarmPhone; i++) {
      sms(String("Srabotal datchik dveri!"), String("+" + String(AlarmPhone[i])));
      delay(1000);
    }
    if (AlarmRing == 1) {
      mySerial.println("ATD+" + String(AlarmPhone[0]) + ";");
      delay(1000);
    }
  }
}

void MasterRing() {
  if (guard == 1) GuardOff();
  else if (guard == 0) GuardOn();
}

void GuardOff() {
  guard = 0;
  EEPROM.update(14, guard);
  LastEvent = "Guard Off. Phone +" + RingPhone;
  Serial.println(LastEvent);
  delay(1000);
  for (int i = 0; i < CountAlarmPhone; i++) {
    if (RingPhone == String(AlarmPhone[i])) sendsmscaller = 0;
    delay(1000);
    sms(String(LastEvent), String("+" + String(AlarmPhone[i])));
    delay(1000);
  }
  if (sendsmscaller == 1) {
    delay(1000);
    sms(String("Guard Off"), String("+" + RingPhone));
    delay(1000);
  }
}

void GuardOn() {
  guard = 1;
  EEPROM.update(14, guard);
  DoorFlag = 1;
  LastEvent = "Guard On. Phone +" + RingPhone;
  Serial.println(LastEvent);
  delay(1000);
  for (int i = 0; i < CountAlarmPhone; i++) {
    if (RingPhone == String(AlarmPhone[i])) sendsmscaller = 0;
    delay(1000);
    sms(String(LastEvent), String("+" + String(AlarmPhone[i])));
    delay(1000);
  }
  if (sendsmscaller == 1) {
    delay(1000);
    sms(String("Guard On"), String("+" + RingPhone));
    delay(1000);
  }
}

void MasterSms() {
  val.toLowerCase();
  if ((val.indexOf("resetconfig") > -1)) {
    EEPROM.update(0, 255);
    eepromconfig();
  }
  if ((val.indexOf("money") > -1)) {
    delay(1000);
    balance();
    delay(1000);
  }
  if ((val.indexOf("pause") > -1)) {
    delay(1000);
    sms(String("Pause " + String(PauseTime) + " min"), String("+" + RingPhone));
    digitalWrite(BLed, LOW);
    delay(PauseTime * 60000);
    digitalWrite(BLed, HIGH);
  }
  if ((val.indexOf("ringon") > -1)) {
    delay(1000);
    AlarmRing = 1;
    EEPROM.update(11, AlarmRing);
    sms(String("RingOn: Alarm Ring is ON"), String("+" + RingPhone));
    delay(1000);
  }
  if ((val.indexOf("ringoff") > -1)) {
    delay(1000);
    AlarmRing = 0;
    EEPROM.update(11, AlarmRing);
    sms(String("RingOff: Alarm Ring is OFF"), String("+" + RingPhone));
    delay(1000);
  }
  if ((val.indexOf("smson") > -1)) {
    delay(1000);
    sendsms = 1;
    EEPROM.update(10, sendsms);
    sms(String("Sms On"), String("+" + RingPhone));
    delay(1000);
  }
  if ((val.indexOf("smsoff") > -1)) {
    delay(1000);
    sms(String("Sms Off"), String("+" + RingPhone));
    sendsms = 0;
    EEPROM.update(10, sendsms);
    delay(1000);
  }
  if ((val.indexOf("guardon") > -1)) {
    delay(1000);
    GuardOn();
  }
  if ((val.indexOf("guardoff") > -1)) {
    delay(1000);
    GuardOff();
  }
  if ((val.indexOf("info") > -1)) {
    delay(1000);
    sms(String("Info: " + LastEvent), String("+" + RingPhone));
    delay(1000);
  }
  if ((val.indexOf("clearsms") > -1)) {
    clearsms();
    delay(2000);
    sms(String("Clear: All messages removed"), String("+" + RingPhone));
    delay(1000);
  }
  if ((val.indexOf("teston") > -1)) {
    delay(1000);
    LedTestOn = 1;
    EEPROM.update(12, LedTestOn);
    delay(1000);
  }
  if ((val.indexOf("testoff") > -1)) {
    delay(1000);
    LedTestOn = 0;
    EEPROM.update(12, LedTestOn);
    digitalWrite(BLed, HIGH);
    delay(1000);
  }
  if ((val.indexOf("ledoff") > -1)) {
    delay(1000);
    LedOn = 0;
    EEPROM.update(13, LedOn);
    digitalWrite(GLed, HIGH);
    delay(1000);
  }
  if ((val.indexOf("ledon") > -1)) {
    delay(1000);
    LedOn = 1;
    EEPROM.update(13, LedOn);
    digitalWrite(GLed, LOW);
    delay(1000);
  }
  clearsms();
}

void ConsolePrint() {
  val.toLowerCase();
  if ((val.indexOf("clearsms") > -1)) {
    clearsms();
    delay(2000);
  }
  if ((val.indexOf("resetconfig") > -1)) {
    EEPROM.update(0, 255);
    eepromconfig();
  }
}

void balance() {
  mySerial.println("AT+CUSD=1");
  delay(200);
  mySerial.println("ATD" + BalanceNumber);
  delay(200);
}

void clearsms() {
  if (ModemID == 1) mySerial.println("AT+CMGD=0,4");
  if (ModemID == 2) mySerial.println("AT+CMGD=4");
}

void sms(String text, String phone) {
  if (sendsms == 1 ) {
    mySerial.println("AT+CMGS=\"" + phone + "\"");
    delay(500);
    mySerial.print(text);
    delay(500);
    mySerial.print((char)26);
    delay(500);
    Serial.println("SMS sended! Phone: " + phone + "; Message: " + text);
    delay(5000);
  } else {
    delay(1000);
    Serial.println("Silent mode, SMS not sended! Phone: " + phone + "; Message: " + text);
  }
}


Команды управления для скетча от 02.12.2016
SMS — команды управления не чувствительны к регистру:


RinOn - включить уведомление звонком при срабатывании датчика
RingOff - выключить уведомление звонком при срабатывании датчика

SmsOn - включить sms-уведомление при срабатывании датчика
SmsOff - выключить sms-уведомление при срабатывании датчика

GuardOn - поставить на охрану
GuardOff - снять  охраны

Info - проверить состояние, в ответ на это сообщение будет отправлено sms с информацией о том с какого номера была включена/выключена охрана 

ClearSms - удалить все сообщения из памяти sim-карты.

Pause - приостанавливает работу системы на 15 минут, система не реагирует на срабатывания датчика.

TestOn - включается тестовый режим, мигает синим светодиодом.
TestOff - выключается тестовый режим.

LedOff - выключает светодиод режима ожидания.
LedOn - включает светодиод режима ожидания.

Money - запроса баланса.

ResetConfig - сброс на заводские установки




Актуальная версия прошивки сигнализации. Реализовано полное управление устройством через смс — сообщения.

Программное обеспечение для прошивки Arduino Nano берём тут.
Инструкция по прошивке
— подключаем Arduino в USB-порт
— выбираем Hex файл
— выбираем тип Arduino Nano
— выбираем COM порт, который создался при подключении Arduino к USB
— скорость 57600
— нажимаем Upload

Прошивку в виде hex — файла берём тут.
Список изменений
GSM_03_12_2016-14-38.hex — исправлена работа устройства с модемом M590.

Команды управления для hex - прошивки от 02.12.2016
SMS — команды управления не чувствительны к регистру:
AddPhone — Добавить номер телефона. Всего может быть добавлено не более 9 номеров + 1 основной номер который автоматически сохраняется в память при первом звонке на устройство после сброса на заводские установки командами ResetPhone или FullReset. Т.е. кто первый позвонил на устройство после его сброска на заводские установки тот и и «главный», этот номер заносится в первую ячейку памяти и его невозможно изменить или удалить через смс. Невозможно добавить два одинаковых номера.
Пример команды:
AddPhone:2+71234567891m
AddPhone:3+71234567892a
AddPhone:4+71234567893
AddPhone:5+71234567894ma
Синтаксис команды:
AddPhone — команда
: — разделитель
5 — записать в пятую ячейку памяти
+71234567890 — номер телефона
m — Признак «Management» — разрешено управление сигнализацией
а — Признак «Alarm» — на номера с этим признаком будут отправляться смс — сообщения о срабатывании сигнализации и сообщения постановке или снятии с охраны.
При отсутствии признаков «m» и «a» телефон заносится в память, но никак не используется.

DeletePhone — Удалить номер телефона.
Пример команды:
DeletePhone :+71234567891
Синтаксис команды:
DeletePhone — команда
: — разделитель
+71234567891 — номер телефона

BalanceNum — Изменение номера запроса баланса и обработка длины ответа запроса. Значение по умолчанию для Beeline: #100#L22.
Пример команды:
BalanceNum:#103#L24
Синтаксис команды:
BalanceNum — команда
: — разделитель
#103# — номер запроса баланса
L24 — Длина (len) пересылаемого ответа 24 символа, обрезаем спам из запроса баланса.

SleepTime — Время «засыпания» сигнализации при получении смс — команды «Pause», указывается в минутах. Значение по умолчанию: 15, не может быть менее 1 и более 60.
Пример команды:
SleepTime:20
Синтаксис команды:
SleepTime — команда
: — разделитель
20 — 20 минут «сна».

AlarmPinTime — Время на которое включается/выключается тревожный/инверсный пин, указывается в секундах. Значение по умолчанию: 60, не может быть менее 1 секунды и более 43200 секунд (12 часов).
Пример команды:
AlarmPinTime:30
Синтаксис команды:
AlarmPinTime — команда
: — разделитель
30 — 30 секунд включения/выключения тревожного пина.

ResetConfig — сброс настроек на заводские установки

ResetPhone — удаление из памяти всех телефонных номеров

FullReset — сброс настроек, удаление из памяти всех телефонных номеров, восстановление значения по умолчанию команды BalanceNum.

RinOn — включить уведомление звонком на «главный» номер записанный в первую ячейку памяти при срабатывании датчика
RingOff — выключить уведомление звонком при срабатывании датчика

SmsOn — включить sms-уведомление при срабатывании датчика
SmsOff — выключить sms-уведомление при срабатывании датчика

GuardOn — поставить на охрану
GuardOff — снять охраны

Info — проверить состояние, в ответ на это сообщение будет отправлено sms с информацией о том с какого номера была включена/выключена охрана

Pause — приостанавливает работу системы на время установленное командой sleeptime в минутах, система не реагирует на срабатывания датчика.

TestOn — включается тестовый режим, мигает синим светодиодом.
TestOff — выключается тестовый режим.

LedOff — выключает светодиод режима ожидания.
LedOn — включает светодиод режима ожидания.

Money — запроса баланса.

ClearSms — Удалить из памяти все sms

//---------//---------//---------//---------//---------//---------//

Консольные команды — вводятся в мониторе порта Arduino IDE.

ClearSms — аналогична sms — команде ClearSms

ListPhone — вывести весть список сохранённых в памяти телефонов

ResetConfig — аналогична sms — команде ResetConfig

ResetPhone — аналогична sms -команде ResetPhone

FullReset — аналогична sms -команде FullReset



* В коде присутствует функция LedTest(), она мигает синим светодиодом, сделана лишь для того чтобы мониторить Arduino, мигает — значит работает, не мигает — зависла. Пока ещё не зависала :)

Как этим пользоваться?!

Сигнализация управляется через звонки и sms-сообщения с разрешенных номеров перечисленных в массиве AllowPhone[], после первого «гудка» модем «вешает трубку».

AllowPhone[] = {«70001234501», «70001234502», «70001234503», «70001234504», «70001234505»} — Номера которым разрешено управлять охраной.
AlarmPhone[] = {«70001234501», «70001234502»} — Номера для отправки sms-уведомлений при срабатывании датчика и уведомления о снятии или постановке на охрану. На первый номер в списке будет осуществляться вызов при срабатывании датчика если выполнена команда RingOn, по-умолчанию эта опция включена. Это сделано потому что sms-сообщения могут прийти с некоторой задержкой, а звонок должен пройти сразу.

Если поступил вызов с разрешенного номера или sms-сообщение с командой GuardOn/GuardOff, то в зависимости от текущего состояния охраны будет отправлено sms-сообщение о постановке или снятии с охраны на номера перечисленные в массиве AlarmPhone[], так же будет отправлено sms-сообщение на номер с которого поступил вызов.

При срабатывании датчика отправляются sms-сообщения на все номера из массива (списка) AlarmPhone[] и осуществится голосовой вызов на первый номер из этого массива.

Световая индикация:
Светодиод светится красным цветом — поставлено на охрану.
Светодиод светится зелёным цветом — снято с охраны, включается/отключается sms-командой LedOn/LedOff.
Светодиод постоянно мигает синим цветом — сигнализирует о том что c Arduino всё в порядке, плата не зависла, используется исключительно для отладки, включается/отключается sms-командой TestOn/TestOff.

Подключение 2 и более датчиков.
Для подключения дополнительных герконовых датчиков используем свободные цифровые пины D2,D3,D5 или D7. Схема подключения с дополнительным датчиком на D7.

Необходимые изменения в прошивке

...
#define DoorPin 6 // Номер входа, подключенный к основному датчику
int8_t DoorState = 0; // Переменная для хранения состояния основного датчика
int8_t DoorFlag = 1; // Переменная для хранения состояния основного датчика 

#define BackDoorPin 7 // Номер входа, подключенный к дополнительному датчику
int8_t BackDoorState = 0; // Переменная для хранения состояния дополнительного датчика 
int8_t BackDoorFlag = 1; // Переменная для хранения состояния дополнительного датчика 
...


void setup() {
...
  pinMode(DoorPin, INPUT);
  pinMode(BackDoorPin, INPUT);
...


...
void Detect() {
// Считываем значения с датчиков
  DoorState = digitalRead(DoorPin);
  BackDoorState = digitalRead(BackDoorPin);

//Обработка основного датчика
  if (DoorState == LOW && DoorFlag == 0) {
    DoorFlag = 1;
    delay(100);
    if (LedOn == 1) digitalWrite(GLed, LOW);
    Alarm();
  }
  if (DoorState == HIGH && DoorFlag == 1){
    DoorFlag = 0;
    delay(100);
  }    

//Обработка дополнительного датчика
  if (BackDoorState == LOW && BackDoorFlag == 0) {
    BackDoorFlag = 1;
    delay(100);
    if (LedOn == 1) digitalWrite(GLed, LOW);
    Alarm();
  }
  if (BackDoorState == HIGH && BackDoorFlag == 1){
    BackDoorFlag = 0;
    delay(100);
  }
}
...



И ещё кое что:
1. Диоды лучше использовать рассчитанные на ток 2 А, так как модуль заражает током в 1 А и нам ещё нужно чем то питать Arduino и модем. В этом экземпляре используются диоды 1N4007, если выйдут из строя заменю на 2 А.
2. Все резисторы для светодиода использовал на 20 кОм, для того чтобы ночью не освещать весь коридор.
3. На герконовый датчик между пином GND и пином D6 так же повесил резистор на 20 кОм.

На этом пока всё. Спасибо за внимание! :)
+
avatar
  • Angrim
  • 04 августа 2016, 11:10
+4
Я и не подозревал, что gsm модуль настолько дешев. Надо прикупить, спасибо за наводку!
+
avatar
  • Bazili0
  • 04 августа 2016, 11:19
0
+
avatar
0
Аккуратно, это совсем не тот модем! По вашей ссылке SIM800L, он заведется только с SIM картой 2G. В моей стране не работает, все SIM карты 3G/4G. Модуль пылится на полке.
+
avatar
  • Bazili0
  • 04 августа 2016, 16:01
0
Тестировал этот модуль с сим-картой, которая основное свое время проводит в LTE-планшете.
+
avatar
0
Подскажите рабочую схему подключения, пожалуйста.
+
avatar
  • Bazili0
  • 04 августа 2016, 18:15
+2
У меня подключно примерно так, но TX-RX подключены через вот такой logical level convertor, потому что использую Arduino Mega 2560 (в ней памяти побольше, да и портов хороший запас)
+
avatar
0
Глупый вопрос, от 5В не заведется?
+
avatar
  • Bazili0
  • 04 августа 2016, 18:41
+3
Такое «долбанутое» питание модуля делалось из расчета того, что его будет питать 3.7v аккумулятор напрямую, потому что в пиках модуль «кушает» до 2 ампер. Если его не обеспечить должным током, то начинаются глюки в виде перезагрузок модуля из-за проседания напряжения во время активной передачи данных.
5в может спалить модуль, а если он не сгорит, то может сильно греться и быстро выйдет из строя.
Можно подключить через диод 1N4007, но тогда о 2 амперах можно забыть.
Поэтому если хочется стабильной работы модуля — лучше всего дать ему то, что он хочет: посадить его напрямую на 18650, а 18650 питать/заряжать от простой и надежной TP4056, которая в свою очередь «кушает» 5v
+
avatar
+1
На модуле стоит танталовый конденсатор, можно ещё электролит на 1000мкф добавить и никакие 2А не не увидите. У меня в плохой зоне приёма во время снятой трубки или во время передачи данных не более 400ма потребляет, а у меня даже электролита нет на входе. Через 1N4007 уже пол года полет нормальный.
+
avatar
  • Bazili0
  • 04 августа 2016, 19:13
0
Вот еще одна инструкция по поводу подключения
+
avatar
  • sls
  • 07 августа 2016, 00:59
0
вот несобранный, но проблема питания там решена более грамотно, чем диодом и конденсатором :)

aliexpress.com/item/Upgraded-version-DIY-KIT-GSM-GPRS-900-1800-MHz-Short-Message-Service-M590E-module-for-project/32654086772.html
+
avatar
  • kvolk
  • 07 августа 2016, 01:04
0
Ну и нафик он нужен с его-то габаритами? Цена как у 800L. Модем говно, единственны плюс — цена, а тут и цена говно. Извините…
+
avatar
  • sls
  • 07 августа 2016, 01:08
0
единственный плюс в том, что не нужно париться с питанием
хотя при такой цене есть модули типа А6/sim800, с которыми заморочек поменьше, факт
+
avatar
  • Leonardo
  • 04 августа 2016, 11:21
0
Добавлю от себя что это очень капризный модем, если учесть что он ещё и бывший в употреблении то из плюсов остаётся лишь его цена.
+
avatar
  • kalobyte
  • 04 августа 2016, 11:26
+2
так его китайцы откуда-то массово выпаивают, видать глючный он оказался и решили навариться на паялах
+
avatar
  • kvolk
  • 04 августа 2016, 11:27
0
Если вопрос цены не стоит остро, то лучше взять SIM800L. Я себе такой заказал и антенну к нему. Но этот модуль, m590, был доведён до ума разве что «из спортивного интереса», этот модуль — брать только из-за цены, других плюсов у него нет.

Да, и к SIM800l можно подключить микрофон, есть для этого контакты, проковырять дырочку в корпусе и по звонку… ну в общем вы поняли :)
+
avatar
  • kvolk
  • 15 октября 2016, 08:40
0
UPD. M590 нормальный дешевый модем, однозначно брать, работает стабильно. Ничем не хуже SIM800l. При подключении по данной схеме никаких дополнительных конденсаторов не нужно, но если есть желание то можно впаять.
+
avatar
  • krysa
  • 04 августа 2016, 12:00
+1
Модуль б/у у всех продавцов, соответственно много брака. Самый распространенный — кз на линиях питания (1,2), проверяйте перед сборкой!
+
avatar
  • 68k
  • 04 августа 2016, 12:20
+1
Кто знает, откуда столько много у китайцев таких б/у модулей?
+
avatar
  • Bazili0
  • 04 августа 2016, 12:31
+19
+
avatar
  • Fghj7
  • 04 августа 2016, 18:49
+2
Ух-ты! Я, также картошку перебираю!
+
avatar
  • Bazili0
  • 04 августа 2016, 18:57
0
Каждый кормится «своей» картошкой :)

PS: Китай — лидер по переработке мусора из штатов. Не верите — погуглите про «королеву мусора». Вот и занимаются китайцы «переработкой» мусора «по полочкам»
+
avatar
  • Andr2016
  • 05 августа 2016, 01:03
0
Здесь покупал за $1.42
+
avatar
  • Bazili0
  • 04 августа 2016, 11:31
+1
Обзор супер.

Версия 2.0:
— Питание от AC-DC преобразователя 12v с функцией backup и подключенным автомобильным аккумулятором.
12-вольтовые уличные PIR-датчики в качестве сенсоров движения
12-вольтовая сирена
— к GSM-модулю подключаем микрофон и громкоговоритель, чтобы можно было на него позвонить и слушать, что происходит, а также говорить.
— Вешаем всякие свистоперделки датчики вроде температуры, влажности, уровня вредных газов и тд
— Через GPRS шлем статистику на сервер.
+
avatar
  • kn_dima
  • 04 августа 2016, 11:39
+6
Исходя из многолетнего опыта использования GSM сигналки с микрофоном — в сад эту функцию.
Нужно видео или хотя-бы фото, т.к. по звуку в трубке невозможно понять — вам дверь выносят или сосед стену сверлит, соседские ли дети по потолку скачут или жулик по вашей квартире ходит.
+
avatar
  • Bazili0
  • 04 августа 2016, 11:54
+1
Видео или фото — это уже версия 3.0 :)
Если есть хороший интернет — то проблем не будет.
А если интернета нет, то при небольшом бюджете спасает только фотокамера с последовательным портом, откуда неспехом ардуиной можно перекачивать картинку по gprs.
Если бюджет побольше, то уже можно смотреть в сторону rpi+usb свисток (3g/4g)
+
avatar
  • sir0ta
  • 04 августа 2016, 15:56
0
Это вообще не проблема. ip камера с нормальным видеопотоком в веб и на роутере набиваем порт на проброс и в путь. Видел как на мопеде на wrt поднимали web сервер, там делали самописную авторизацию и там же редирект видеопотока (т.е. камера ни одним портом не смотрит в веб, т… к. в их софте уверенности нет).
+
avatar
  • Bazili0
  • 04 августа 2016, 15:59
0
Не совсем Вас понял. Это не проблема, когда нет хорошего интернета?
+
avatar
  • sir0ta
  • 04 августа 2016, 16:59
0
Когда нет хорошего интернета, то не стоит и парится. Ибо та же картинка может просто не успеть передаться, как что-то уже произовйдет плохого. Вообще должен быть компекс мер. Т.е. начинается все с качесвтенной двери и хорошего замка, потом какой-то сигнализатор хозяина, органов соответствующих, всех рядом и т.д., ну и на последок видеофиксация постоянная. Я в свое время в аутсорсе видел провалы систем видеофиксации под движению… Лучше пусть пишется и пишется недельку хотя бы. Вон знакомую уболтал в магазине на 2 хдд внешних. 3 камеры пишут туда неделю с хвостиком. Она раз в неделю один винт изымает, друго ставит и т.д. Содержимое дома скидывает (конечно растраты), но вот месяц назад торговый представитель предъявил что недодали ему 5 тысяч рублей в прошлый раз. 20 минут на поиски видео и Тп разоблачен и уволен с работы. А так эти винты в свое время при курсе 30рубасиков за доллар обошлись что-то в районе 15 тысяч (2 1ТБ внешних + 2 3,5 по 2ТБ в ее домашний комп) отбили себя уже в первый год эксплуатации. Сейчас уже наверное раза 2-3 отбили себя.
+
avatar
  • kvolk
  • 04 августа 2016, 11:40
0
В гараж — идеально :)
+
avatar
  • kn_dima
  • 04 августа 2016, 11:46
+2
В гараж нужен датчик удара от автомобильной сигналки. Он прекрасно чует как открывание ворот, так и попытки проломить стену.
Опять-же, наличие фото или видео — будет огромнейшим плюсом такой системе.
+
avatar
  • kvolk
  • 04 августа 2016, 11:50
+1
Да, только как его сливать, это уже бюджетным решением не будет, а хранить фото там же — бессмысленно.
+
avatar
  • Demz
  • 04 августа 2016, 12:00
0
а вы всю коробочку с глаз спрячьте, чтобы никто кроме вас не знал, где она, тогда шансы есть
+
avatar
  • kvolk
  • 04 августа 2016, 12:03
0
Всё равно видно куда датчики идут, разве что ещё на этапе отделки / ремонта прятать.
+
avatar
  • chaloc
  • 04 августа 2016, 12:20
+1
Делать дубль. На видное место ставить «пугач» из датчика, светодиода работы на внешней стене гаража и автомобильной сирены. Основную систему скрытно и тихо. Вор зашел-сирену обезвредил и расслабился. О наличии скрытого дубля с GSM и видеофиксацией обычный делец и не догадается. А не обычные один черт придут как минимум с глушилкой, а перед этим еще и проверят что и в каком порядке срабатывает.
+
avatar
  • sajat
  • 04 августа 2016, 14:52
0
Договориться с соседом и писать на устройство хранения в соседнем гараже. :) Можно даже по Wi-Fi. Или спрятать устройство хранения в тайник (в своём же гараже) и писать на него опять-таки по Wi-Fi.
+
avatar
  • bodisey
  • 04 августа 2016, 13:05
0
OV7670 300KP VGA (300 рублей) Вполне себе бюджетное решение для фотофиксации. С отправкой тоже проблем, я думаю, не будет, так как M590 умеет работать по FTP протоколу — подключаться, авторизироваться, получать -принимать файлы и отключаться. Думаю, не проблема отправить полученный ВМР-файлик на FTP-сервер
+
avatar
  • kvolk
  • 04 августа 2016, 13:12
0
Согласен, только m590 на sim800l уже придётся заменить.
+
avatar
  • bodisey
  • 04 августа 2016, 13:14
0
мм, чем sim800 получается в этом случае лучше?
+
avatar
  • kvolk
  • 04 августа 2016, 13:19
0
Нормальной поддержкой gprs протокола. M590 не умеет работать по доменному имени, где-то были ссылки.
+
avatar
  • Bazili0
  • 04 августа 2016, 13:19
0
Не получится с ардуиной, потому что эта камера не имеет внутреннего буфера, а сама ардуина не способна сохранить фотку в себя. Тут либо модуль карты памяти прикручивать, либо искать более вменяемую камеру со встроенным буфером и последовательным портом.
Подробности проблем с этой камерой здесь
+
avatar
  • bodisey
  • 04 августа 2016, 13:32
0
Согласен, 1 килобайта (или 2 в ардуине?) оперативной памяти будет ой как маловато)))
+
avatar
  • Korniat
  • 05 августа 2016, 00:27
0
Вот готовый датчик с GSM вместе с камерой и отправкой по ММS

Вариант с SD картой

И вариант только с додзвоном

Когда то делал в машину со старого телефона по принципе быстрого набора, до сих пор работает, подключал на 5в вместо 3.7в так как просадка была большая.
Еще один GSM модуль помню покупал к сигнализации дома где то лет 10 назад, 35 долларов стоил, построен на пик контроллере, с виду собирался в каком то подвале с намеком на серийность с инструкцией на ксерокопии, так вот вспомнил как настройки организовали: на сим карту надо было сохранить «номер телефона» с настройками в первую ячейку сим карты, выглядел он примерно так: «0111020101131110» где каждая цифра отвечает за какую то функцию, а номера додзвона надо было сохрянить в следующих ячейках сим карты, достаточно автономный принцип…
+
avatar
  • sls
  • 07 августа 2016, 01:05
0
версия 3.0 автосигналка — добавление куска программы вольтметра, делитель из резисторов 100к/10к — бортовое напряжение в смс от сигнализации, дешевый датчик типа dht11 — на температуру и влажность или RTC типа 3231 с часами и температурой, дисплеи от 1602 до бесконечности, управление центральным замком и стеклоподьемниками, а также связь по обд2 :)
+
avatar
  • kn_dima
  • 04 августа 2016, 11:34
+5
Сделайте постановку/снятие «таблеткой» — намного удобнее, чем через телефон.
+
avatar
  • kvolk
  • 04 августа 2016, 11:38
0
Я думал об этом, но мне как-то не хочется стену ковырять, для считывателя. Буду вторую собирать — реализую.
+
avatar
  • kn_dima
  • 04 августа 2016, 11:44
+1
Поставьте внутри.
При постановке на охрану сделать задержку, чтобы успеть выйти без срабатывания тревоги.
При открывании двери в режиме охраны — сразу отправлять SMS и с небольшой задержкой — голосовой вызов, чтобы успеть снять с охраны до звонка.
+
avatar
  • 68k
  • 04 августа 2016, 12:03
+2
Если сделать голосовой вызов сразу только себе, а СМС с задержкой на все номера оповещения.
У себя на телефоне с номера сигналки установить не громкий и не резкий звонок. Трубку не брать. Так вы будете уведомлены что кто-то пришел домой. Если это ожидаемо — то будете спокойны.
Далее, если через установленное время охрана не снята, отправляются тревожные СМС.
Так не будут тратиться деньги на СМС при каждом приходе домочатцев, а только в случае несанкционированного открытия двери (или при забывании снять с охраны).
+
avatar
  • kvolk
  • 04 августа 2016, 12:05
0
… Номера для отправки sms-уведомлений при срабатывании датчика и уведомления о снятии или постановке на охрану. На первый номер в списке будет осуществляться вызов при срабатывании датчика если выполнена команда RingOn, по-умолчанию эта опция включена. Это сделано потому что sms-сообщения могут прийти с некоторой задержкой, а звонок должен пройти сразу.
Оно как-то так и работает.
+
avatar
  • Bazili0
  • 04 августа 2016, 11:39
+2
15 таблеток
модуль

PS: Не поверите! Я все это купил еще 3 месяца назад, но никак руки не дойдут собрать :(
+
avatar
  • kn_dima
  • 04 августа 2016, 11:50
0
Хороший вариант — надо будет применить.
+
avatar
  • adenisen
  • 04 августа 2016, 11:40
+3
с питанием на МТ не очень кошерно. особенно при батарейном питании. ардуина прекрасно будет работать напрямую от лития, модем же по питанию имеет диод, на котором и гасит входные 5В до тех же 4.2.
Кстати, очень рекомендую поставить дополнительную емкость ~1000мкф непосредственно на питание самого модуля модема (после диода) — на порядок снизится глючность модуля и требования к питанию
+
avatar
  • kvolk
  • 04 августа 2016, 11:47
+1
Согласен что это не лучшее решение, но при таком варианте у нас на выходе всегда 5,2 В. Практически до тех пор, пока контроллер не отключит аккумулятор, если нет питания от сети. А если не использовать MT3608, то уже при напряжении питания в 3,7 В модуль ведёт себя нестабильно. А вот конденсатор надо бы поставить, да нет у меня танталового. Найду — поставлю.
+
avatar
  • adenisen
  • 04 августа 2016, 12:33
0
тантал не обязательно, там уже есть один. можно электролит. лучше с малым ESR
+
avatar
  • sls
  • 04 августа 2016, 12:54
0
обычного lowESR 2200 мкф хватает даже при условии хренового приема, желательно напаивать прямо на выводы модуля, 1,4 минус, 2,3 плюс (они запараллелены)
+
avatar
  • lexx
  • 15 августа 2016, 02:33
0
Так куда именно на плюс или минус напаивать?
+
avatar
  • sls
  • 15 августа 2016, 08:28
0
минус конденсатора на выводы 1 или 4 модуля, плюс на выводы 2 или 3 его же
+
avatar
+1
Диоды лучше использовать рассчитанные на ток 2 А, так как модуль заражает током в 1 А и нам ещё нужно чем то питать Arduino и модем.
Можно снизить ток заряда лития сменой резистора. Ежели у вас не отключают электричество каждые пару часов, то можно обойтись и 0.3-0.5А.
+
avatar
  • kvolk
  • 04 августа 2016, 11:48
0
Да, возможно это лучшее решение, и на блок питания меньше нагрузка. Свет отключают «по праздникам», раза три в году :)
+
avatar
  • 68k
  • 04 августа 2016, 11:54
0
Светодиод светится красным цветом — поставлено на охрану.
Светодиод светится красным цветом — снято с охраны.
Опечатка?
+
avatar
  • kvolk
  • 04 августа 2016, 11:59
0
Естественно, копипаст, блин :) Спасибо, поправил!
+
avatar
  • mooni73
  • 04 августа 2016, 11:57
0
А разве на андроидах нет софта охранной сигналки? — будет и фото на емайл или фтп при срабатывании. А простейшую гсм систему я использовал в машине лет 10 назад — потом снял, задолбался бегать на ложные срабатывания.
+
avatar
  • kvolk
  • 04 августа 2016, 12:00
0
Наверное есть, но речь тут не об этом.
+
avatar
  • kn_dima
  • 04 августа 2016, 12:03
+3
Как к андроиду концевики и другие датчики подключить?
+
avatar
  • mooni73
  • 04 августа 2016, 12:21
0
Много способов, начиная от esp8266 и blink, без проводов. В простейшем случае использовать кнопку HF гарнитуры.
+
avatar
  • kn_dima
  • 04 августа 2016, 12:27
0
андроид умеет просыпаться по кнопке гарнитуры?
Если да — тогда кнопка+ формирователь DTMF будет неплохим универсальным решением для передачи сигналов от датчиков.

Wi-Fi жрёт много — автономность сильно снижается.
+
avatar
  • Kaspiysk
  • 04 августа 2016, 12:11
+1
+
avatar
  • kvolk
  • 04 августа 2016, 12:17
0
… ссылки будут актуализированы на товары других продавцов у которых максимальное или приближенное к максимальному число продаж товара и лучшая цена...
Модули и так ненадёжные, поэтому решил что, чем больше продаж у продавца тем лучше. Чем больше отзывов тем проще судить о количестве брака.
+
avatar
  • viakob
  • 04 августа 2016, 12:21
+3
Просто и понятно! Хорошо бы ещё добавить посылку sms при включении/отключении сетевого питания (ну и при низком заряде батареи — на всякий случай).
+
avatar
  • sls
  • 04 августа 2016, 12:50
+2
плюсонул в карму
недавно делал нечто подобное, есть кое-какие дополнения на любителя

прямое соединение RX-TX ардуинки и m590 хоть в принципе и работает, но лучше было бы схему из даташита, диод и два резистора

после выполнения InitModem() у ардуинки в некоторых случаях не хватает буфера на прием, т.е. лучше поправить Softwareserial.h на предмет его увеличения #define _SS_MAX_RX_BUFF

не увидел в рисунке использование ножки «Boot» модема и управление ей ардуинкой, а модули m590, в особенности при хреновом питании, могут вести себя непредсказуемо

при батарейном питании лучше использовать штатную команду модуля AT+ENPWRSAVE

было что-то еще, связанное с обработкой master ring и неочисткой переменной val, завтра посмотрю
+
avatar
  • Bazili0
  • 04 августа 2016, 12:59
0
Для RX-TX соединения можно заюзать level converter
+
avatar
  • sls
  • 04 августа 2016, 13:02
0
можно, хотя диод типа 1n4148 и два копеечных резистора проще и дешевле :)
еще есть такие — aliexpress.com/item/Free-shipping-1pcs-3-3V-5V-TXS0108E-8-Channel-Logic-Level-Converter-Convert-TTL-Bi-directional/32552015830.html
+
avatar
  • Bazili0
  • 04 августа 2016, 13:05
0
Здесь тоже не дорого: 7 центов за канал. Там 5 модулей, по 4 канала на модуль.
+
avatar
  • gaudin2
  • 04 августа 2016, 13:41
0
можно заюзать pro mini на 3,3 вольта и можно забыть про level converter и повышающий преобразовать, питать можно напрямую от батареи.
+
avatar
  • kvolk
  • 04 августа 2016, 13:25
0
Ардуино загрузкой модема не управляет, и о энергосбережении смысла говорить нет, так как половина теряется на диодах и преобразованиях.

было что-то еще, связанное с обработкой master ring и неочисткой переменной val, завтра посмотрю
хотелось бы узнать.
+
avatar
  • sls
  • 04 августа 2016, 13:55
+1
ну так уберите диод и повышайку
все равно рано или поздно к этому придете
ардуина и модуль прекрасно питается от TP4056 вместе с литиевой батарейкой, да и вообще у модуля максимальное напряжение питания 4.2В, в то время, как у Вас аж 4.6
если что, у меня из 14 модулей m590 только один отказался работать на 3.3В, но он изначально имел следы перегрева на крышке
управление питанием модуля нужно хотя бы из тех соображений, что если модем зависнет или самопроизвольно поменяет скорость порта (да-да, бывает это у них), то дернуть boot ногой ардуинки по таймауту гораздо легче, чем ехать на место
+
avatar
  • kvolk
  • 04 августа 2016, 14:19
0
ну так уберите диод
Как это должно быть подключено, без диода?

управление питанием модуля нужно хотя бы из тех соображений, что если модем зависнет или самопроизвольно поменяет скорость порта (да-да, бывает это у них), то дернуть boot ногой ардуинки по таймауту гораздо легче, чем ехать на место
Согласен полностью.
+
avatar
  • sls
  • 04 августа 2016, 14:34
0
диод установлен последовательно с плюсом питания модуля, т.е. его можно выпаять и подать + с выхода 4056, можно не выпаивать и подать на катод, можно просто его (диод) закоротить.

емкости танталового конденсатора из комплекта в обзоре будет маловато, я прямо на ноги 1 и 2 модуля напаивал электролит 2200х6.3В+0.3мкф керамику
+
avatar
  • kvolk
  • 04 августа 2016, 14:56
0
диод установлен последовательно с плюсом питания модуля, т.е. его можно выпаять и подать + с выхода 4056, можно не выпаивать и подать на катод, можно просто его (диод) закоротить.
И таким образом мы всегда будем подавать на плюсовой контакт li-ion аккумулятора +4,4 В с выхода блока питания. У контроллера заряда OUT+ и B+ соединены.
+
avatar
  • sls
  • 04 августа 2016, 15:04
0
4.2, если уж так, или еще меньше, коли акк разряжен
во всяком случае больше, чем 4.2 я на них не наблюдал
+
avatar
  • mummykbf
  • 14 октября 2016, 02:29
0
вопрос на счет самопроизвольной смены скорости порта.
то есть в функции инициализации модема надо предусмотреть команду AT+IPR=9600?
+
avatar
  • kvolk
  • 14 октября 2016, 21:17
0
За 2 месяца работы никакой самопроизвольной смены скорости не было. Эта команда не поможет если скорость изменится, но мне совершенно непонятко каким образом это может произойти. Считаю это слухами. Ни разу с таким не сталкивлся.
+
avatar
  • kvolk
  • 07 августа 2016, 01:06
0
было что-то еще, связанное с обработкой master ring и неочисткой переменной val, завтра посмотрю
Завтра уже прошло…
+
avatar
  • sls
  • 07 августа 2016, 01:22
0
не добрался до железки
в общем, при каком-то раскладе на Луне после однократного звонка с прописанного мастером телефона любой звонок далее воспринимался, как master ring со всеми вытекающими, поподробнее скажу, как доберусь
+
avatar
  • kvolk
  • 07 августа 2016, 08:29
0
На чём основано это умозаключение? У кого-то работает так в похожем коде или в этом коде есть косяк?
не добрался до железки
Каким образом тогда определили что код кривой? На глаз?
+
avatar
  • sls
  • 07 августа 2016, 10:56
0
почему умозаключение?
у меня их в железе пять штук работает с разной обвязкой, за основу брался тот же код, что и Вы допиливали
+
avatar
  • gaudin2
  • 04 августа 2016, 13:39
+3
Тех кто бросился покупать gsm модуль, предупрежу gsm m590 работает только со старыми симками, если у вас симка 4G — модуль работать не будет проверенно на 3 операторах. На sim800L такой проблемы нет.
+
avatar
0
У меня не получилось завести sim800L с сим-картой 3G. Подскажите, как подключали?
+
avatar
  • gaudin2
  • 04 августа 2016, 18:15
0
Подключал напрямую от литиевой батареи, по питанию стоит конденсатор на 1000 мкФ
+
avatar
  • prom77
  • 04 августа 2016, 13:41
0
Идея гуд! Вопрос что если включить подавитель сигналов GSM типо такого www.jammer.su/monster-portativnyj-podavitel-10-chastot.html, вся затея тщетна?
+
avatar
  • kvolk
  • 07 августа 2016, 12:42
0
А сами-то как думаете?
+
avatar
  • Serg32
  • 04 августа 2016, 13:52
0
Нравятся мне такие обзоры :)
Вот только диод 1N4007, а не IN4007
+
avatar
  • kvolk
  • 04 августа 2016, 14:15
0
Ok, поправил! :)
+
avatar
  • CTAHOK
  • 04 августа 2016, 14:27
0
Модуль прожорлив, 2000mAh на сутки — совершенно никуда не годится, а свет могут отключить на более,
чем на одни сутки, что нередкость. Актуально организовать работу по внешним прерываниям, саму ардуинку
отправив в спящий режим, а сабжевый модуль подрубать при изменении состояния порта. Хотя и тут есть недостаток — управление модулем извне будет затруднено или полностью недоступно.
+
avatar
  • kvolk
  • 04 августа 2016, 14:30
+1
В данной схеме как раз таки не модуль прожорлив, а вся эта канитель с преобразованием напряжения. Подключите 2 и более банок в параллель, и будет большая автономность.
+
avatar
  • serenya
  • 04 августа 2016, 14:58
0
Зимой пытался сделать нечто подобное на 3-4 канала, но забросил. В процессе захотелось знать время срабатывания, парсить смс, оперативы не хватило. Я не очень разбираюсь с программированием, по этому пользовал только то что уже есть в ардуине, ничего самолепного, экономящего озу не писал.
+
avatar
  • Bazili0
  • 04 августа 2016, 15:04
0
Можно переключиться на Arduino Mega 2560
256кб флэш-памяти и 8кб SRAM «хватит всем»!
+
avatar
  • serenya
  • 04 августа 2016, 15:22
0
у меня ее нет, а покупать не хочется, да и формфактор не очень. мне про мини больше нравится
+
avatar
  • kvolk
  • 04 августа 2016, 15:13
0
Я не очень разбираюсь с программированием, по этому пользовал только то что уже есть в ардуине, ничего самолепного, экономящего озу не писал.
Это как?
+
avatar
  • serenya
  • 04 августа 2016, 15:22
0
функции и библиотеки ардуино иде
+
avatar
0
Работаю в тех службе, по охране. Давно задумался сделать нечто подобное. ППК «Мираж», «Цербер», «DCS » и «Nx» — стоят слишком дорого!
В схему не хватает ключа точ-мемори (ТМ) или хотя бы включателя выключателя, постановки-снятия, и соответственно времени задержки на эти операции. Ещё бы добавить шлейф а лучше два, на объемный извещатель и акустический. Готовые блоки для работы с ключами ТМ продаются в спец магазинах охраны, стоят порядка 300руб, ключи 50р. В общем думаю, если все хорошо сконструировать, будет неплохая альтернатива, даже не «фирменным» но и китайским GSM сигнализациям!
+
avatar
  • kvolk
  • 04 августа 2016, 17:38
0
Тач мемори прилепить сюда особой сложности не составит.
+
avatar
0
Как всегда все проблемы в деталях. Для себя такое можно пилить бесконечно. На продажу или под клиента надо продумывать все нюансы: возможные глюки\отказы, наличие компонентов у поставщика, качество компонентов, сертификации, «что будет если..» и т.д. Пробуйте, это возможно :)
+
avatar
  • serg_mur
  • 04 августа 2016, 15:43
+3
Хороший обзор! Плюс.
Вопрос: зачем питание с МТ3608 подавать на VIN Ардуино? Это вход для внешнего питания (6-20В), оно подаётся на встроенный стабилизатор 5В. Зачем 5В подавать на стабилизатор 5В? Надо напрямую на вход 5В. Не?
+
avatar
  • kvolk
  • 04 августа 2016, 17:34
0
Вылетит резистор на МТ и подастся на пин +5В например в 2 или 3 раза больше.
+
avatar
  • serg_mur
  • 04 августа 2016, 17:49
+1
Так у Вас это же напряжение и на модем подаётся. Как он отнесётся к +12? Выдержит?
+
avatar
  • kvolk
  • 04 августа 2016, 17:57
0
Понятия не имею, но если не выдержит — сильно горевать не буду :)
+
avatar
  • Kirillm
  • 04 августа 2016, 15:52
0
Всегда хотел понять, скажите а какие дальнейшие Ваши действия когда сработала такая GSM сигнализация. Ви же далеекоо. ) Цель
+
avatar
  • Bazili0
  • 04 августа 2016, 15:58
+3
— Включить ревун, который может отпугнуть воров
— Воспроизвести аудиозапись, сообщающую злоумышленникам о том, что их действия зафиксированы на фото и видео и уже переданы в компетентные органы, которые уже выехали в их направлении.
— Позвонить местному сторожу, который может сходить и проверить дом
— Позвонить во вневедомственную охрану (с которой ранее был заключен договор) и попросить съездить и проверить обстановку
+
avatar
  • Kirillm
  • 04 августа 2016, 16:14
0
Ви думаете за то время которое понадобится для всего описанного у Вас не винесут все.
+
avatar
  • Bazili0
  • 04 августа 2016, 16:17
+1
Думаю, что хотя бы некоторый процент воров задумается о том, что его физиономия была запечатлена на камеру и куда-то передана.
+
avatar
  • Kirillm
  • 04 августа 2016, 16:26
0
Запись лая собаки внутри при приближении к двери наверно самий оптимальный вариант будет
+
avatar
0
К нам в магазин уже третий раз за год заходят воры и тащат все, что не приколочено, не боясь FullHD камер. Их физиономии со всеми чертами лица и родинками переданы полиции, но менты даже не шевелятся.
+
avatar
  • kn_dima
  • 04 августа 2016, 16:25
0
Этой весной у меня какой-то урод вынес стекло в авто.
GSM-оповещение сработало — я успел выбежать, оббежать многоэтажку и высветить двухбаксовым фонариком спину убегающего вора, который сразу-же скинул в траву украденный бортовой компьютер.
Итого потери — одно боковое стекло, всего 1200 руб.
+
avatar
0
А мог бы этим компьютером вам по голове…
И даже если вы под два метра и под 200 кг, а вам могу нарисовать кучу сценариев.
+
avatar
+6
у меня зимой вскрыли гараж ночью, унесли самое ценное. И неделю он стоял открытый, за неделю сп%здили всё остальное, багажник, большие тиски, даже верстак утащили, не говоря о ключах и пассатижах! Да с грабителями особо не поспоришь если у тебя нет пулемёта! Но ситуацию с открытой дверь можно взять под контроль!
+
avatar
0
Делал самую бюджетную GSM звонилку на attiny13, пары оптронов и старой нокии чернобелой. В телефоне устанавливал номер быстрого набора (распаивал кнопки быстрый набор и сброс через оптроны на выходы Attiny13). На вход Attiny цеплял герконовый датчик. Так эта бюджетная GSM сигналка использовалась дома как охранная и на охоте как индикатор срабатывания петли на кабана :) В алгоритм забивал чтобы она еще через 5 мин. перезванивала напоминала.
+
avatar
0
а можно реализовать в виде энергоэкономичного гпс трекера?
включается раз в сутки — отправляет координаты ( например на мейл) и снова засыпает, экономя батарейку.
хочется компактный девайс на одном аккуме в самокат засунуть, и раз в месяц заряжать )))
+
avatar
+1
можно. Возьмите attiny или голую atmega, она может периодически просыпаться и проверять надо ли будить прожорливый GPS + GPRS. Сам микроконтроллер без обвязки ест очень мало в режиме сна. От батарейки-таблетки может работать около года.
+
avatar
  • vidivana
  • 04 августа 2016, 19:58
0
Спасибо за идею варианта «3-й руки»!

+
avatar
  • kvolk
  • 04 августа 2016, 20:26
+1
Пожалуйста :) Очень удобная штука получилась, устойчивая. Пружина извлечена из старого дискового счётчика. Держит отлично. Жесткий диск лучше древний найти, он потяжелее будет :)
+
avatar
  • vidivana
  • 04 августа 2016, 20:43
+1
Спасибо за подсказку, я думал єто просто толстый обмоточный провод. У меня, как раз, валяется старый счетчик! Очень старые я, к сожалению, после извлечения магнитов, выкидывал… Но, думаю, и с не очень старым будет лучше, чем єти китайские за 15! баксов.

Спустя полчаса:
+
avatar
0
Крутотень. Сам давно мечтаю что-то подобное сделать, но моей криворукости с ардуиной пока хватило лишь на регулировку температуры в аквариуме )
+
avatar
  • bunny64
  • 05 августа 2016, 07:17
0
+
avatar
  • sls
  • 05 августа 2016, 07:46
+1
спасибо за пожелание, Вам тоже :)
в большинстве случаев целью вскрытия гаража, сарая и прочего является быстро намутить себе на дозу (бутылку, таблетку и т.д.)
при такой ситуации приобретение глушилки непозволительное барство и ненужный перфекционизм

если вскрытие (угон, кража и т.д.) именно планируется, то, как правило, не поможет и взвод милиционеров, сидящих напротив
+
avatar
  • kn_dima
  • 05 августа 2016, 08:10
0
В перерывах между принятием доз, нарки тоже что-то жрут. Поэтому неохраняемые гаражи/сараи часто вскрываются ради соленьев/вареньев/картошки и т.п.
+
avatar
  • 7734
  • 05 августа 2016, 11:27
0
спасибо за обзор) собираю аналогичную штуку. у меня снятие-постановка осуществляется не только с телефона, но и с брелка 433мгц. приемники на али стоят копейки а брелки около 300р за штуку. (только не нужно говорить про взломоустойчивость, я вкурсе. если кому надо будет проникнуть — ничего не остановит). также есть сирена. еще хочу свет над дверью чтоб с тогоже брелка включался (часто лампочка перегорает в подъезде). в мыслях датчик закрытия замка на обычной кнопке — чтоб не забыть запереть. и думаю как пристроить сенсорный датчик к замочной личине, ато несколько раз спички втыкали)) чтоб чирикал однократно если ктото лапкми шурудит))
вообще надежность таких систем конечно под бооольшим вопросом. если есть основания серьезно опасаться то лучше платить нормальные деньги за нормальную охрану. а это так — для успокоение души и творческих порывов)))
+
avatar
  • lexx
  • 09 августа 2016, 00:07
0
Скетч и что нужно докупить для брелка скините?
+
avatar
  • 7734
  • 09 августа 2016, 11:03
+1
брелки брал тут aliexpress.com/item/wireless-alarm-remote-control-for-home-security-alarm-315MHZ-433mhz/502055460.html

приемник и передатчик тут aliexpress.com/item/1Set-Link-Kit-Wireless-RF-Transmitter-and-Receiver-Module-for-Arduino-ARM-MCU-Remote-Control-Hot/32431978101.html

использовал только приемник естественно)
ставите библиотеку RCSwitch.h в ней есть куча примеров
+
avatar
  • Sabj
  • 09 августа 2016, 12:36
0
Здравствуйте.
Скажите пожалуйста. У меня уже есть GSM сигнализация. Всё работает. Хочу её немного усовершенствовать, а именно хочу сделать постановку и снятие брелком (такой возможности она не имеет). У сигнализации есть вход, который при замыкании на минус переведёт её в режим охрана. Повторное же замыкание этого контакта на минус снимет её с охраны.
У меня 2 вопроса:
1. Вы дали ссылку на приёмник
— какой выходной сигнал выдаёт такой приёмник — у него «открытый коллектор»?
2. Как «подружить» брелок с приёмником?
Спасибо.
Кому интересно — хочу «прикрутить» приёмник к такой сиге
+
avatar
  • SEM
  • 09 августа 2016, 12:48
0
Полагаю, чтобы подружить эти брелок с приёмником — понадобится Ардуина и программирование.
Вам наверно проще было бы вот такой комплект использовать:
aliexpress.com/item/1pc-DC-12v-10A-relay-1CH-wireless-RF-Remote-Control-Switch-Transmitter-Receiver/32428099104.html
+
avatar
  • Sabj
  • 09 августа 2016, 12:57
0
Думал над таким вариантом — смутило что коммутировать 10-ти амперным реле слаботочную цепь — не наш случай…
Может есть такое же но с «открытым коллектором». Чтобы кнопку нажал — ключ открылся?
+
avatar
  • 7734
  • 09 августа 2016, 13:59
0
думаю готовых под вашу задачу вариантов не найдете) а при стоимости ардуины мини в 100р вопрос решить можно с помощью оптореле.
также можно довесить недорогие ПИРы http://ru.aliexpress.com/item/Free-shipping-1PCS-LOT-HC-SR501-HCSR501-SR501-human-infrared-sensor-module-Pyroelectric-infrared-sensor-imports/2036142641.html и заставить ардуину замыкать контакты не только постановки/снятия но и контакты датчиков.
+
avatar
  • SEM
  • 09 августа 2016, 14:15
0
смутило что коммутировать 10-ти амперным реле слаботочную цепь
Смущать должно если наоборот…
Кнопку нажали — реле щёлкнуло. Защиты, правда, тут никакой, в отличие от автосигнализаций с плавающими кодами и т.п.
Только надо посмотреть режим работы, замкнуло-отпустило или одной кнопкой на пульте «вкл». второй «выкл». Наверняка есть управляющая этим перемычка, но точно сказать может только тот кто пробовал этот блок лично.

UPD. В описании товара есть что-то про замыкание двух управляющих перемычек (их видно на фото), но что имел в виду китайский продавец, переводя на английский то что сам не знает — понять трудно.

working:
self-locking(Short circuit T)
interlock:(Short circuit L)
inching (you will received this type) — в таком виде оно приходит, перемычки не замкнуты

UPD2. Из одного из отзывов:
Работает пока держишь кнопку.
Т.е. то что вам и нужно.
+
avatar
  • Sabj
  • 10 августа 2016, 06:19
0
Спасибо!
+
avatar
  • 7734
  • 09 августа 2016, 13:49
0
на сколько я понял этот приемник для подключения к ардуине, тоесть он все что поймает — передает в порт. поэтому все манипуляции проводятся программно.
+
avatar
  • Sabj
  • 11 августа 2016, 06:06
0
Понял. Спасибо!
+
avatar
  • Cookins
  • 10 августа 2016, 21:51
0
Подскажите. Купил данный модуль — все спаял, но когда пишет modem startup я ввожу и ничего не вводится… далее вслепую продавал и вводить но всеравно ничего. Тоже самое пробовал через монитор порта с программы ардуино — но после кнопки send опять ничего.что может быть не так.
+
avatar
  • kvolk
  • 11 августа 2016, 07:24
0
Скорее всего дохлый модуль, пробовали эхо ответы включить?
+
avatar
  • Cookins
  • 11 августа 2016, 18:36
0
Как это сделать?
+
avatar
  • Cookins
  • 12 августа 2016, 11:20
0
Тут автор еще не указал, что его надо питать дополнительно через подпитку на 1—2 ампера. Конденсатор на 1000 мкф также нужен. Номинальное его потребление 4.8 вольта.
Это очень желательно.
+
avatar
  • kvolk
  • 12 августа 2016, 11:26
0
Тут автор еще не указал, что его надо питать дополнительно через подпитку на 1—2 ампера.
Это вы о чём сейчас? Я описал рабочий вариант, если вы питаетесь от БП то ставьте кондёр, тут же стоит аккумулятор параллельно БП, при таком раскладе всегда будут необходимые (на доли секунды) в пике, 2 А.
Да, «нужен» и «очень желательно» — это разные «вещи».
+
avatar
  • kvolk
  • 12 августа 2016, 11:36
0
Если циклично в консоль пишет:

modem startup 

modem startup 

modem startup 


Копайте в сторону питания. Чтобы наверняка проверить модем подпаяйтесь вот так:


Конденсатор не обязательно, должно и так работать. Аккумулятор 18650 или что-то подобное.
+
avatar
  • Cookins
  • 12 августа 2016, 12:03
0

У вас после картинки этой написано «теперь подключаем к компьютеру» — так вот, у меня циклично и начало писать, и пришлось подпитать еще 1 ампером, чтобы писало раз. Вот к чему.
+
avatar
  • kvolk
  • 12 августа 2016, 12:38
0
Ну так не тянет ваш usb порт, у меня всё отлично, без подпитки. Наверное с симкартой подключали?
+
avatar
  • Cookins
  • 12 августа 2016, 12:55
0
да :)
еще такой вопрос — лампочка красная на модуле у вас горит? в каких случаях горит?
+
avatar
  • kvolk
  • 15 августа 2016, 14:15
0
Не помню уже, у меня 10ком на буте постоянно висит, модем всегда мигает
+
avatar
  • kvolk
  • 12 августа 2016, 11:30
0
АТ команда «ATE0» — выключает эхо, «ATE1» включает. Копируем команду ATE1 в буфер, вставляем в консоль нажимаем энтер, теперь всё что вы вводите должно отображаться в консоли.
+
avatar
  • Cookins
  • 12 августа 2016, 12:07
0
Вот про это и спросил — в PuTTy у меня нигде ничего не прописывается — куда вводить.
я вроде не пароль ввожу :)
просто надпись modem startup и никакой консоли, или места куда вводить. я скачал послд. версию программы PuTTy c офф сайта.
обычно пишеться сразу после первой строки, как и обычно в консоли.
+
avatar
  • kvolk
  • 12 августа 2016, 12:40
0
Копируем команду ATE1. Тыкаем мышью на ченый экран путти, нажимаем ctrl+v и энтер. После должна появиться надпись ОК. И теперь можно набирать команды с клавиатуры, буквы должны отображаться

ЗЫ Если «вслепую» ввести команду ATI и нажать энтер, модем выводит в консоль информацию о прошивке и т.п.?
+
avatar
  • Cookins
  • 12 августа 2016, 13:14
0
я зашел в настройки putty — потом terminal — потом line discipline options — и там поставил все на force on, и консоль заработала.
значит прописал все что вы сказали но не пишет ОК.

чтобы я не писал из комманд — ничего.
кстате, первую надпись я поймал только на скорости 115200. у меня модуль — neoway m590e
+
avatar
  • sls
  • 15 августа 2016, 08:43
0
пробуйте на 19200 и 9600 — эти скорости у этих модулей чаще всего
на 115200 не все usb-rs232 конверторы работают корректно, ардуинка через softwareserial тем более, разве что аппаратный компорт задействовать на модем
+
avatar
  • kvolk
  • 15 августа 2016, 14:19
0
Нет, если модем пишет литинскими значит скорость выставлена верно, нужно прозвонить rx tx пины, скорее всго гдето недопаяно или убит сам модем
+
avatar
  • sls
  • 15 августа 2016, 14:44
0
у него пролезло ATE1 и CR (/r), так что скорее или буфер закончился или модуль попытался связаться с БС и упал по недостатку питания, после чего стартонет он с большой вероятностью на 9600 или 19200
+
avatar
  • Cookins
  • 15 августа 2016, 17:04
0
попробую.
я просто для консоли в настройках включил force on для прописи — перед этим ничего не давало писать если на auto.
+
avatar
  • kvolk
  • 15 августа 2016, 20:57
0
«Пролезло» потому что в патти включил force on. То есть вывод на консоль без подтверждения получения модулем этой команды. Если бы модуль получил эту команду то был бы ответ «OK». Да упоротый модем, сопли были сожгли ему rx/tx к бабке не ходи.
+
avatar
  • kvolk
  • 15 августа 2016, 14:25
0
Форс он выключить.
+
avatar
  • kvolk
  • 15 августа 2016, 14:22
0
Пропаяйте пины rx rx на модеме, проверьте наличие оловянных «соплей», может не пропаялось чего. Если буквы в консоли есть — скорость выбрана верно.
+
avatar
  • Cookins
  • 15 августа 2016, 17:01
0
с самого модуля GSM neoway прозвон идет с пинов rx и tx.
перед этим замыкало где то — арудино гасла при подключении питания от нее на модель — совсем!
думаю не сильно замыкало. пришлось перепаять его заново.
вероятнее всего убился модуль или надо было просто купить уже пропаяный 8)
спасибо за старания.
+
avatar
  • kvolk
  • 15 августа 2016, 21:08
0
Видел уже один такой же после «соплей», точно такие же признаки: в консоль выводит, а из консоли команды не принимает.
+
avatar
  • lexx
  • 15 августа 2016, 04:23
0
Подскажите если взять схему автора обзора — нужно ли к ней доустановить конденсатор и какого номинала и куда? И оставлять ли диоды если устанавливать конденсатор?
+
avatar
  • kvolk
  • 15 августа 2016, 14:18
0
Вы не пробовали просто взять эту готовую, рабочую схему из обзора? Кондёр ставят если есть проблемы с питанием, у вас блок питания параллельно аккумулятору, проблем не бедет, если есть желание повесьте конденсатор 1000-2200 мкф 6,3в после диода на плате модема.
+
avatar
  • lexx
  • 19 августа 2016, 17:11
0
Подскажите как прикрутить к этой схеме ещё и датчик движения и как код изменить?
+
avatar
  • diod
  • 24 августа 2016, 16:12
0
Подскажите, если модуль заменить на sim800 то команды менять нужно или только согласовать питание надо?
+
avatar
  • kvolk
  • 25 августа 2016, 10:38
+1
Ещё не пробовал, но в ближайшее всемя соберу на sim800l и адаптирую прошивку.
+
avatar
  • diod
  • 25 августа 2016, 13:40
0
Спасибо. Буду следить за развитием.
+
avatar
  • kvolk
  • 31 августа 2016, 19:09
0
Будет отдельный обзор, прошивка, предположительно, будет универсальная.
+
avatar
  • kvolk
  • 04 сентября 2016, 14:53
0
Прошивка от 4 сентября уже поддерживает SIM800L.
+
avatar
  • diod
  • 04 сентября 2016, 19:27
0
осталось дождаться когда приедет модем (( и будем тестить
+
avatar
  • lexx
  • 31 августа 2016, 04:17
0
Не приехал еще sim800l?
+
avatar
  • kvolk
  • 31 августа 2016, 19:08
0
Да приехал он ещё в мае:) Сейчас собираю аналог этого устройства на этом sim800l. Думаю что через недельку — две запилю обзор. Много времени на тестирование уходит. И прошивку адаптировать надо под оба модема, чтобы универсальная была.
+
avatar
  • lexx
  • 01 сентября 2016, 23:04
0
Из деталей что то нужно допонительно к sim800l или все тоже самое?
+
avatar
  • kvolk
  • 02 сентября 2016, 09:49
0
Блок питания, контроллер заряда-разряда, аккумулятор 18650, светодиод, герконовый датчик, выключатель, 4 резистора. Опционально дополнительная антенна, хотя и штатной должно хватить.
+
avatar
  • kvolk
  • 03 сентября 2016, 23:56
0
На модеме Sim800l пока не получается добиться стабильной работы, m590 работает стабильно.
+
avatar
  • kvolk
  • 03 сентября 2016, 23:55
0
На модеме Sim800l пока не получается добиться стабильной работы, m590 работает стабильно.
+
avatar
  • kvolk
  • 04 сентября 2016, 14:58
0
Прошивка готова, что касается питания:
Берём блок питания 5В, контроллер заряда-разряда TP4056 для li-ion, ардуину и модем всё это соединяем без всяких преобразователей. Там как раз питание до 4,2В на выходе, ардуине питание подrлючаем на пин +5B. Всё отлично работает.
+
avatar
  • lexx
  • 05 сентября 2016, 01:50
0
Теперь sim800l работает стабильно? А что насчет диодов e027, резисторов?
+
avatar
  • kvolk
  • 05 сентября 2016, 08:00
0
Диоды и повышайка мт3608 не нужны.с выхода контроллера заряда сразу подаём питание на ардуину и модем.
+
avatar
  • lexx
  • 05 сентября 2016, 18:04
0
резисторы только для светодиода и на геркон оставлять? И как со стабильностью работы так как ранее вы писали что sim800l работает не стабильно?
+
avatar
  • kvolk
  • 06 сентября 2016, 08:57
0
резисторы только для светодиода и на геркон оставлять?
Да.
… как со стабильностью работы...
Работает стабильно.

В файл SoftwareSerial.h (C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SoftwareSerial\src\SoftwareSerial.h) необходимо внести изменения

было так:

#define _SS_MAX_RX_BUFF 64

стало так:

#define _SS_MAX_RX_BUFF 192
+
avatar
  • lexx
  • 10 сентября 2016, 00:44
0
Сам модем sim800l не нуждаеться в доп настройке через usb uart ttl?
+
avatar
  • kvolk
  • 10 сентября 2016, 07:21
0
Нет, там автоматическая настройка скорости.
+
avatar
  • mummykbf
  • 12 октября 2016, 01:42
0
пару вопросов.
1. для чего в библиотеке увеличивается буфер?
2. на ардуино.ру не размещали?
+
avatar
  • kvolk
  • 12 октября 2016, 11:46
0
1. Для того, чтобы хавтало буфера для общения с модемом.
2. Нет.
+
avatar
  • mummykbf
  • 13 октября 2016, 00:41
0
ModemID используется только для выбора соответствующей команды стирания смс с сим-карты или еще для чего-то?

п.с. Кстати, в одном примере встречал совет такого рода, что АОН надо включать именно в момент поступления звонка и выключать АОН по его завершению. Объяснялось это тем, что возможно ложное исполнение команды если после звонка с мастер-номера будут поступать звонки с других номеров, которых нет в скетче. Ваши размышления на этот счет? имеет смысл это реализовывать?
+
avatar
  • kvolk
  • 13 октября 2016, 09:48
0
стирания смс
Пока только для этого, все остальные используемые в скетче команды идентичны.

возможно ложное исполнение команды если после звонка с мастер-номера будут поступать звонки с других номеров, которых нет в скетче.
Протестировали, не подтвердилось. Считаю что даже если и существует такой баг, то реализовать его на практике довольно сложно.
+
avatar
  • lexx
  • 02 сентября 2016, 13:50
0
А чем скетч от 25.08 отличаеться от старого?
+
avatar
  • kvolk
  • 02 сентября 2016, 16:38
+1
Добавлено.
// — 25.08.2016 — Pause (pause, PAUSE) — приостанавливает работу системы на 5 минут, система не реагирует на срабатывания датчика.

TestOn (Teston, teston, TESTON) — включается тестовый режим, мигает синим светодиодом.
TestOff (Testoff, testoff, TESTOFF) — выключается тестовый режим.
+
avatar
  • edgi
  • 18 сентября 2016, 10:41
0
у этого модема нет gprs или 3g? доступ к web интерфейсу получить на ардуинке
+
avatar
  • kvolk
  • 18 сентября 2016, 21:31
0
Не ясен вопрос. Есть gprs.
+
avatar
  • edgi
  • 18 сентября 2016, 21:42
0
удаленно получить доступ к веб интерфейсу запрограммированного на ардуине с поднятым веб сервером на ней же. нужен конечно ddns для этой цели но это уже не относится к этому вопросу.
+
avatar
  • kvolk
  • 18 сентября 2016, 21:52
0
А есть библиотека динднс для ардуины? Или белый айпи надо взять у оператора сотовой связи. Теоретически возможно, а как на практике, это сложно сказать.
+
avatar
  • edgi
  • 18 сентября 2016, 22:26
+1
полно примеров пример
+
avatar
  • flyback
  • 27 сентября 2016, 18:22
0
Замечательный обзор — спасибо автору!
Сегодня получил свой первый SIM800L, за 5 минут на макетке собрал схему, залил скетч от 26.9 — все работает!
Подскажите кто знает — ссылку на али, какой микрофон выбрать, чтобы поставить на SIM800L для прослушивания эфира?
+
avatar
  • kvolk
  • 29 сентября 2016, 00:08
0
Думаю что любой подойдёт, от детской игрушки какой-нибудь попробуйте.
+
avatar
  • flyback
  • 29 сентября 2016, 10:40
0
Спасибо за идею, но игрушек у меня нет ), а покупать, думаю, накладно выйдет.
Китайцы продают микрофоны для мобил, я не специалист, но мне кажется, что у микрофона, чобы слушать комнату д.б. другие характеристики чем у «трубочного».
+
avatar
  • flyback
  • 27 сентября 2016, 18:33
0
Замечательный обзор — спасибо автору!
Сегодня получил свой первый SIM800L, за 5 минут на макетке собрал схему, залил скетч от 26.9 — все работает!
Подскажите кто знает — ссылку на али, какой микрофон выбрать, чтобы поставить на SIM800L для прослушивания эфира?
— зы
Никак не разберусь, есть на сайте возможность подписаться на отдельный обзор, а не на весь блог?
+
avatar
  • lexx
  • 29 сентября 2016, 20:50
0
вот что выдаёт при компиляции arduino 1.6.12 было что то подобное у кого?

D:\Downloads\ard\gsm\gsm\gsm.ino: In function 'void InitModem()':

D:\Downloads\ard\gsm\gsm\gsm.ino:115:27: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

if (mySerial.find(«M590»)) {

^

D:\Downloads\ard\gsm\gsm\gsm.ino:121:29: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

if (mySerial.find(«SIM800»)) {

^
+
avatar
  • bsdshneg
  • 01 октября 2016, 23:40
0
День добрый, пока жду комплект — задался вопросом удобства настройки, а именно вносить номера (AllowPhone и AllarmPhone) в eeprom… т.е. если сигнализация новая, то принимая первую смс с текстом master, она вносит номер отправителя в AllowPhone (пишет в память… но это ещё на половину сделано), так же вносить и другие номера + после отправки смс на все номера сделал так, чтобы до «закрытия» двери сигнализация больше ничего не отсылала (а то она слала по кругу без остановки)… так вот, собирается-ли автор делать нечто подобное в своих версиях прошивки?.. просто если будет такая версия, то я не буду изобретать велосипед))))))))))))))))))

Да, и не лучше-ли чтобы геркон подавал землю на пин, и диод на него повесить, от внезапного появления +5В ))))))
+
avatar
  • kvolk
  • 03 октября 2016, 15:48
0
а именно вносить номера (AllowPhone и AllarmPhone) в eeprom…
Можно попробовать, но позднее.
… чтобы до «закрытия» двери сигнализация больше ничего не отсылала (а то она слала по кругу без остановки)…
Ничего сигналка не шлёт по кругу, если дверь открыта и сигнализация поставлена на охрану, то для того чтобы ушла тревожная смс необходимо сначала закрыть дверь и снова её открыть. Чтобы ушла ещё одна смс — опять закрыть и снова открыть.
Принцип работы:
Снято с охраны -> Открыли дверь -> Поставили на охрану -> Закрыли дверь -> Открыли дверь -> Тревожная смс отправлена -> Голосовой вызов на первый номер AllarmPhone -> Закрыли дверь -> Открыли дверь -> Ещё ОДНА тревожная смс отправлена -> Голосовой вызов на первый номер AllarmPhone
или
Снято с охраны -> Закрыли дверь -> Поставили на охрану -> Открыли дверь -> Тревожная смс отправлена-> Голосовой вызов на первый номер AllarmPhone -> Закрыли дверь -> Открыли дверь -> Ещё ОДНА тревожная смс отправлена -> Голосовой вызов на первый номер AllarmPhone
Если у вас шлёт смс по кругу, проверьте резистор на d6 и gnd. Проверьте тестером что у вас на пине d6. Как только на d6 появляется gnd уходит ОДНА смс на каждый номер из массива AllarmPhone.

+ после отправки смс на все номера сделал так, чтобы до «закрытия» двери сигнализация больше ничего не отсылала (а то она слала по кругу без остановки)…
Опишите подробнее пожалуйста.
+
avatar
  • bsdshneg
  • 03 октября 2016, 16:16
0
На счёт слать по кругу — да, это я косяк, пардоньте (я на макетке вообще про резистор забыл) ))))))))))

Можно попробовать, но позднее.
хочется увидеть Ваш вариант решения… чтобы найти более простой и правильный)))
+
avatar
  • kvolk
  • 03 октября 2016, 18:33
0
Свмый простой — как сейчас реализовано. Не часто вы будете там номера менять. А микроюсб вынести на корпус для быстрой перепрошивки.
+
avatar
  • bsdshneg
  • 03 октября 2016, 20:08
0
В 90% случаях согласен!!!)))
Но бывает так, что нужно изменить номера, а интернетов для удалёнки нету ))) друг попросил на дачу такую, а у него ни ноута, ни интернета на даче… Значит нужно будет демонтировать и тащить домой )))))))
+
avatar
  • kvolk
  • 04 октября 2016, 15:31
0
На даче, часто менять номера… Что-то интересное, дача — общежитие чтоли?
+
avatar
  • bsdshneg
  • 04 октября 2016, 15:37
0
не часто, но за последний год, он умудрился 2 раза сменить номер… =D

p.s. зачем в общагу сигнализация?.. там вся прелесть в «поймать и покарать»… это же общага))))))
+
avatar
  • bsdshneg
  • 01 октября 2016, 23:44
0
За обзор большое спасибо, всё чётко и понятно рассказано… да ещё и развитие есть)))))))))
+
avatar
  • mummykbf
  • 14 октября 2016, 01:42
0
int CheckPhone() {
  for (int i = 0; i < CountPhone; i++) {
    if (val.indexOf(AllowPhone[i]) > -1) {
      RingPhone = AllowPhone[i];
      Serial.println("Event: +" + RingPhone);
      return 1;
    }
  }
  return 0;
}


честно как не пытался так и не смог понять эту функцию :(
как происходит проверка номера и выборка номера, на который в ответ отсылается смс?

у меня задача несколько иная — отсылать смс в ответ на входящий звонок или входящее сообщение. номера в начале скетча указаны массивом как и у вас.
+
avatar
  • kvolk
  • 15 октября 2016, 08:25
0

int CheckPhone() { 
  for (int i = 0; i < CountPhone; i++) { //Запускаем цикл от 0 до значения CountPhone - количество 
                                     //номеров телефонов в массиве AllowPhone
    if (val.indexOf(AllowPhone[i]) > -1) { //Если нашли совпадение
      RingPhone = AllowPhone[i]; //Переменной RingPhone присваивается значение номера звонящего
      Serial.println("Event: +" + RingPhone); //Пишем в консоль, можно не учитывать эту строчку
      return 1; //Возвращаем 1 процедуре/функции которая запросила
    }
  } //Перебираем весь массив AllowPhone и если не находим совпадения 
  return 0; //Возвращаем 0 процедуре/функции которая запросила
}

Итак, если вернулся 0 — звонящий не наш, давай досвиданья, разрываем соединение, ничего не делаем, в переменной RingPhone хранится номер ПОСЛЕДНЕГО звонящего присутствующего в массиве AllowPhone. Если вернулась 1 — звонящий свой, переменной RingPhone присваивается его номер, запускаем дальнейшую обработку. Как-то так.
+
avatar
  • flyback
  • 05 ноября 2016, 18:54
0
А Вы не думали, чтобы добавить в перечень смс-команд модуля, запрос баланса по симке модуля?
Использую Вашу разработку (10х!!) и понял, что контроль баланса средств возможен только через личный кабинет, а интернет не всегда доступен. Поэтому, если не пополнить баланс вовремя, понять что модуль отключился от сети — перестал выполнять свою функцию, можно только по отсутствию ответа на любую команду, напр. «info»
Мне кажется, это было бы полезное дополнение.
+
avatar
  • kvolk
  • 05 ноября 2016, 21:09
0
… разработку (10х!!)...
Не понял :)
Мне кажется, это было бы полезное дополнение
Полностью согласен, постараюсь сделать. У меня «безлимит» на этих симках, поэтому даже не посещала меня эта идея, но штука нужная — попробую реализовать.
+
avatar
  • kvolk
  • 06 ноября 2016, 20:31
0
Ясно-понятно :)
+
avatar
  • kvolk
  • 06 ноября 2016, 20:31
0
Спасибо.
+
avatar
  • kvolk
  • 17 ноября 2016, 21:21
0
Реализовано. Выложил новый скетч.
+
avatar
  • flyback
  • 17 ноября 2016, 22:10
0
Забрал, спасибо
А возможно каким-то образом подписаться на обзор?
Хотелось бы узнавать об/получать обновления(х), а не пойму как это сделать используя функционал mysku
Или это невозможно и «Реализовано. Выложил новый скетч» для заинтересованных Вы отправляли персонально, а те об изменениях в обзоре могут узнавать только периодически заходя в него? (
+
avatar
  • kvolk
  • 17 ноября 2016, 22:19
0
Персонально, я мониторю комментарии, доделываю по возможности — отписываюсь в комментариях. Не могу точно сказать, скорее всего изменений в теме не увидеть :(. На каком модеме у Вас собрана сигнализация, есть ли баг с командой info?
+
avatar
  • kvolk
  • 18 ноября 2016, 21:37
0
Новый скетч от 18.11, попробуйте, отпишитесь работает ли стабильно команда info.
+
avatar
  • flyback
  • 19 ноября 2016, 13:22
0
Извините за задержку с ответом
Получил вчера разъемы дюпоны-сокеты-линейки и решил заодно и все перепаять.Изначально собирал на микросхемных сокетах, а они, ч.г., узковаты — не понравилось.
Смогу ответить только завтра. А модем у меня 800й
+
avatar
  • kvolk
  • 19 ноября 2016, 13:56
0
Сегодня-завтра новый скетч будет :) Сейчас тестирую.
+
avatar
  • flyback
  • 20 ноября 2016, 00:21
0
Ждем.
Не знаю, тот ли баг, о котором Вы спрашивали —
смски от сигнализации не приходят. Ни на «info», ни на «Smson».
А в старой версии (11.10.16) все нормально
Баланс тоже не присылает.
+
avatar
  • kvolk
  • 20 ноября 2016, 00:33
0
Скет от 19.11? Только что проверил и на 590, и на 800 модемах — всё отлично работает. Обращайте внимание на процесс прошивки, если занять больше 72% озу работа синалки нестабильна.
+
avatar
  • kvolk
  • 20 ноября 2016, 00:52
0
Обновите arduino ide.
+
avatar
  • flyback
  • 20 ноября 2016, 23:50
0
IDE всего лишь сборщик и оно здесь ни при чем (прошивку можно собрать и в студии и winavr). Все оказалось проще — так не терпелось опробовать, что недопаял, вынул все на макетку, но подключил на 5V внешних. Проверил, отписался, что не работает, а когда понял, что я наделал — чуть не обос… ся )). Полагаю, будет нелишним в шапку обзора вставить, этак 50-м Таймсом рОманом и обязательно красным цветом — больше 4.2V не давать!
Сейчас проверил, живой-чудокитайскойтехники!!! не спалился, работает и баланс присылает. Еще раз Вам спасибо за труд и потраченные ср-ва. Только представить сколько их уходит на отладку.
+
avatar
  • kvolk
  • 21 ноября 2016, 09:29
0
IDE всего лишь сборщик и оно здесь ни при чем
Категорически не согласен.
+
avatar
0
Я по аналогии с Вашим кодом делаю свой проект по дистанционному управлению электрическим котлом на дачу.
Всплыли кое какие баги, может кому пригодиться.

В чем суть бага — есть sms-команды на принудительное включение котла и принудительное отключение, ON и OFF соответственно, независимо от того в каком состоянии находился котел после запусков и остановок по звонку с мобильного. Так же как автор проекта данной сигналки, использую команды SMSON и SMSOFF для включения и отключения sms-оповещений о событиях.

Допустим по звонку или по sms-команде ON котел был запущен, а потом вдруг в голову мне приходит мысль, что sms-оповещения мне надоели и я отправляю команду на отключение этих самых оповещений командой SMSOFF. Теперь собственно сам баг — код обрабатывает команду SMSOFF как команду на отключение оповещение… и заодно как команду на отключение котла по команде OFF. Соответственно если котел был выключен и решил вновь включить sms-уведомление, то командой SMSON плюсом ко всему запускается котел, то есть отрабатывается команда ON.

Отсюда вывод: одна sms-команда не должна быть в составе другой, то есть полностью эксклюзивной.
+
avatar
  • kvolk
  • 06 ноября 2016, 20:32
0
Да, именно по этой причине не использовал простые команды типа on или off.
+
avatar
0
Столкнулся с новой проблемой: модем не удаляет смс.
по факту перепробовал разные варианты:
AT+CMGD=0,4
AT+CMGD=1,4
AT+CMGD=4
Счетчик сообщений +CMGS: после каждой смс все равно увеличивается на единицу

Описание Команда удаления SMS сообщений
Формат AT+CMGD=,Параметр – порядковый номер удаляемого сообщения, для удаления одного сообщения можно не указывать

:
0 – удалить сообщение с номером 1 – удалить все прочитанные сообщения
2 – удалить все прочитанные и отправленные сообщения
3 – удалить все прочитанные, отправленные и неотправленные сообщения
4 – удалить все сообщения
Ответ OK или ERROR
Пример AT+CMGD=1
OK Удалить сообщение с номером 1
AT+CMGD=1,4
OK Удалить все сообщения
+
avatar
  • kvolk
  • 08 ноября 2016, 14:03
0
Счетчик сообщений +CMGS: после каждой смс все равно увеличивается на единицу
Вас это смущает?
Попробуйте вставить симку в сигналку, принять несколько смс, вынуть симку, вставить в телефон и проверить смс. Потом обратно вставить в модем выполнить команду clear или AT+CMGD=0,4 (AT+CMGD=1,4 или AT+CMGD=4) снова вставить в телефон и проверить что стало с этими смс.
+
avatar
0
На радиолабе вот как ответили на мой вопрос:

Ответ вида +CMGS: это не счетчик сообщений на СИМ карте, этот счетчик просто инкрементируется при каждом отправленном (или неотправленном) сообщении, это условный счетчик, и к нему не надо привязываться.

Количество сообщений на СИМ карте проверяется командой AT+CPMS? В ответ получаем +CPMS: «SM»,1,25,»SM»,1,25,»SM»,1,25

Что означает что на СИМ карте есть одно сообщение, а всего на СИМ помещается 25 сообщений.
+
avatar
0
с этим всё более-менее устаканилось, но аппетит растет во время еды по мере написания кода. есть такая АТ команда AT+CCLK?, которая считывает дату и время с модуля, в ответ на нее получаем строку следующего вида: +CCLK: «05/01/01,00:09:48»
Как её распарсить на составляющие? допустим хочу присваивать день, месяц и год переменным day, mon, yy соответственно; часы, минуты, секунды соответственно переменным hh, mm, ss.

если можно, то куском кода для ардуино, потому как в парсинге полный ноль.
+
avatar
  • kvolk
  • 09 ноября 2016, 00:24
0
А дату и время в модем как устанавливать будете? Через gprs синхронизировать не получится, скорость низкая и канал связи нестабильный. При отключении дата и время сбрасывается… Это не время сети.
Что на счечёт парсинга, то вам сюда.
+
avatar
  • YuRIK
  • 14 ноября 2016, 03:24
0
Kvolk, есть необходимость при тревоги установить логическую единицу на каком либо пине на одну две минуты. Я не программист, если Вас не затруднит и есть такая возможность дописать код программы.
+
avatar
  • kvolk
  • 16 ноября 2016, 23:44
0
Реализовано, постараюсь к концу недели выложить скетч. Сейчас пробую допилить запрос баланса и потом сразу выложу, так сказать "… двух зайцев сразу".
+
avatar
  • YuRIK
  • 17 ноября 2016, 02:25
0
Kvolk, спасибо будем ждать.
+
avatar
  • kvolk
  • 17 ноября 2016, 21:20
0
Реализовано. Выложил новый скетч.
+
avatar
  • kvolk
  • 17 ноября 2016, 21:21
0
Реализовано. Выложил новый скетч.
+
avatar
0
Проблем с зависанием GSM модуля не было?.. надо делать периодический опрос и управление питанием модуля через транзистор?
+
avatar
  • kvolk
  • 17 ноября 2016, 22:12
0
Нет, не было, за 3 месяца ни разу не завис модем. Сейчас есть непонятный баг с командой info на модеме m590, ответ не отправляет.
+
avatar
  • Gena_
  • 23 ноября 2016, 20:53
-1
Если не компилируется скетч
'AllowPhone' was not declared in this scope
раскоментируйте две строки где прописываются номера телефонов
+
avatar
  • kvolk
  • 23 ноября 2016, 22:09
0
Спасибо, поправил. Прошу прощения за минус, промазал с телефона.
+
avatar
  • sotyi67
  • 25 ноября 2016, 13:26
0
Здравствуйте. А для удобства может добавить кнопку (потайную) для выключения и включения сигнализации на охрану?
Выходим из помещения, нажимаем кнопку, закрыв дверь, ставится на охрану. И когда приходим, открыв дверь, у нас есть несколько секунд, чтоб нажать на кнопку, снять с охраны.
+
avatar
  • kvolk
  • 25 ноября 2016, 13:52
0
В принципе можно, но правильнее добавить считывание ключа ibutton, как в домофонах.
+
avatar
  • sotyi67
  • 25 ноября 2016, 13:57
0
Ключ можно забыть или потерять. :-)
А вообще, большое спасибо за тему и скетч.
+
avatar
  • kimber
  • 25 ноября 2016, 14:20
0
А можете реализовать такое в одном из ближайших обновлений, с ibutton или rfid? Хотя с ibutton проще и дешевле.
+
avatar
  • kvolk
  • 25 ноября 2016, 14:32
0
Да, если память устройства позволит, сейчас её осталось около 15%. Если занятость ОЗУ более 74% работа устройства не стабильна, это факт.
+
avatar
  • kimber
  • 25 ноября 2016, 14:34
0
Спасибо! Будем надеяться на лучшее.
+
avatar
  • kvolk
  • 25 ноября 2016, 14:39
0
Разве что потом переходить на Arduino Mega, там оперативки в 4 раза больше. Но и плата просто огромна по сравнению с Nano.
+
avatar
  • kimber
  • 25 ноября 2016, 17:27
0
Если развивать проект дальше, то имеет смысл, но тогда слово «бюджетная» придется убрать, правда смотря с чем сравнивать.
+
avatar
  • kvolk
  • 25 ноября 2016, 17:49
0
Я считаю, что надо каким-то образом оптимизировать память, последний раз оптимизацией получилось высвободить почти 20% ОЗУ.
+
avatar
  • kimber
  • 25 ноября 2016, 17:52
0
Вот, как пример, есть размер по-меньше, но ценник какой-то немаленький.

А насчет оптимизации, то это верно.