Вдохновление питал из этих двух известных обзоров на этом сайте:
mysku.club/blog/ebay/51321.html,
mysku.club/blog/ebay/44545.html
Изначально хотел свою маленькую энерго эффективную (от любого акума 4,2В) но с более грамотным кодом сигналку, хотя ардуино я знал на уровне базовых уроков :).
За основу была взята статья от
CTAHOK и с неё началось медленное более углубленное изучение контроллера и Си.
Для понимании происходящего эти два обзора обязательны к прочтению.
Замечу,
Arduino Pro Mini RobotDyn реально меньше кушает, так что если вам нужен автономный вариант, не пренебрегайте этим советом. Но главное это грамотный уход в сон. Стандартный
sleep_cpu() (в большинстве реализаций только он используется) на самом деле не полностью тушит «свет». Играясь разными
ADCSRA = 0; и т.п. можно снизить потребление тока во сне на уровне погрешности дешового мультиметра. После долго изучения, проб и ошибок, была написанна рабочая версия сигналки от 18650 но с приходом апетита хотелось чтоб это всётаки было больше похоже на законченное решение а не инженерный образец плюс добавить функциональсноти как у
kvolk. Вот и появилась, спустя много времени, эта статья с первой публичной версией. Всё делалось на энтузиазме и ради процесса, если комуто не угодил функциональностью, описанием, уж извините. Хоть всё работает просто, но описать все эти нюансы оказалось непростой задачей, возможно даже чтото упустил, забыл, не протестировал. Буду рад всем найденым багам и предложениям по улучшению. Хотя вроде багов не осталось :)
Дисклеймер
Надеюсь вы понимаете что на
реальные объекты нужно ставить проф решения. Данное решение хоть и позволяет отправлять хозяину звонок о нарушении охроняемого контура, всежё это игрушка, предназначенная для охраны чегото
не существенного.
Из этого также следует что это изделие для тех кто хоть чтото понимает в микроэлектронике и прогромировании.
Ну и в 23 году сигналка с общенением только через смс, выглядит как то нелепо (интернета нет и не предвидется) поэтому as-is.
Минимальный набор
этого достаточно чтоб подключиться к компу и просто проверить в работе, посмотреть команды
1. Плата ардуино Nano или Micro
2. GSM modem Neo M590 или SIM800
3. Любой сенсор например PIR AM312 или кусок провода
Более подробно ниже.
Важно
На комплектующих, сборке, настройке модема и других базовых моментах останавливаться не буду, это описанно и в статьях выше и много где еще, пожалуйста прочтите их. Скажу лишь модем надо предварительно настроить на скорость 9600 остальные настройки модема желательны по умолчанию и архи важно иметь хорошее питание выдающее честные 2 Ампера и надежное подсоединение ко всем пинам. Все не используемые пины заземлить. Более подробно про модем
mysku.club/blog/aliexpress/37745.html Выхода в интернет у модема нет. Пароль с сим карты убрать. Все команды управления сигнализацией только латиницей и только большими. Если в будущем размер прошивки превысит 16Кб его можно уменьшить (если комуто важно 16Кб) с небольшим урезанием фунционала.
Сигналка работает только в сранах +7, +373, +375, +380.
Критика
Графики, картинки добавленны.
По поводу выхода в интернет — согласен, имеете право думать что там троян, боян и т.д. но если по делу:
- а) вы это сразу увидите по счету. б) что полезного даст выход в inet? вот реально, майнить на ардуино? в) вышлет ваши личные данные, а откуда они в пустой симке? г) отключит сигналу, в неизвестном городе в неизвестном месте? а толку? д) отправит вашу геолокацию? модем не имеет такой функции в принципе.
- Исходя из дисклеймера вы не должны ставить это изделие на дорогие для вас объекты, а значит и притензии «ты украдешь у нас важную информацию» не уместны.
- Опять исходя из дисклеймера, если вы понимаете в прогромировании, значит вы знаете как проверить что делает модем. Если нет — ниже описанно как. Если всеравно не понятно — лучше закрыть эту статью.
- К тому же можно поставить симку без выхода в интернет.
- Или на плате Nano в Arduino, запускаете на компе Serial монитор и легко проверяете все команды которые отправляются на модем. Как он конфигурируется. Что отправляет и т.д.
- Многие из вас юзают китайские сигналки, IP камеры и тд. Все они имеют закрытый код. Почти все они имеют бэкдор. Вы купили их за деньги но при этом вы не критикуете что там закрытый код и не боитесь что они крадут ваши данные. Тут же всё бесплатно, всё легко проверяется как на ладони — но море недовольства.
- Соурсов: сори не будет. Free for use w/o source.
- Если не переубедил и страх остался — просто не заливайте прошивку.
Если не работает
Ресеты когда ищет сеть, звонит, смс — проблема питания или контактов
Ресеты когда ищет сеть, звонит, смс — убедитесь что у вас есть деньги и для звонков и для смс
Выключается когда ищет сеть, звонит, смс — проблема питания или контактов
Ресетится или перестаёт отвечать (зависает) при первом запуске или настройке — обнулите весь еепром. все ячейки должны быть или 00 или FF
Ресетится циклически — уберите пароль на симке
Ресетится циклически — убедитесь что у вас GSM симка а не CDMA например
Ресетится циклически — убедитесь что у вас активная GSM симка
В кратце как работает (более подробно ниже): Может работать как с уходом в сон так и всегда включенна. Для всегда включена лучше запитывать от БП. Если в Багдаде всё спокойно, ардуинка выключает модем и сама уходит в сон, предварительно включив режим охраны. В режиме сна её может пробудиь только тревога. GSM естественно не работает для экномии батареи. Когда тревога — ардуино просыпается, включает модем, отправялет смс о тревоге, некоторое время бодрствует — для приема смс-команд, и опять уходит в сон. Программа на строенна так что если сбой мобильной сети то ардуино рестартуется, и опять благополучно уходит в сон/охрану.
Касательно баланса — пока что, прошивка работает только в режиме английских букв и USSD запроса баланса. Т.е. чтобы работал баланс, ответ должен приходить латиницей через USSD а не смс-кой или звонком. Если у вашего оператора нет такой функции — отключите в настройках сигнализации получение баланса.
Техническая информация по проекту
Прошивка расчитанна на Arduino на чипе Atmega 168/328 (Uno, Nano, Pro Mini) и Atmega 16u4/32u4 (Micro/Leonardo). Подходят как платы 5В так и 3.3В.
For Atmega 168/328:
Sketch uses 11530 bytes (37%) of program storage space. Maximum is 30720 bytes.
Global variables use 128 bytes (6%) of dynamic memory, leaving 1920 bytes for local variables. Maximum is 2048 bytes.
For Atmega 32u4:
Sketch uses 14394 bytes (50%) of program storage space. Maximum is 28672 bytes.
Global variables use 266 bytes (10%) of dynamic memory, leaving 2294 bytes for local variables. Maximum is 2560 bytes.
EEPROM использует всего 40 ячеек.
- Arduino может питаться как от акума так и от БП так и от обоих вместе. Если только от акума то режим сна включать обезательно (без сна проработает около недели). Сколько долго может проработать от одной 18650 я не замерял но например PIR AM312 китайцы пишут потребляет 0.1 mA выходит достаточно долго (месяца 4 точно а то и полгода). В режиме сна потреблением ардуины можно пренебречь, будет потребление только у сенсоров.
- GSM Modem используется: Neo 590/m590e (возможно и 6хх) и Sim800.
- PIR датчики или герконовые датчики или любые другие с двумя состояниями: любые. 4 штуки. можно разные. Я проверял:
HC-SR505/501 только 5В, out средний пин длительностью 8 секунд. мне не подходит как по размеру так и по питанию и по времени уровня.
MINI SR602 out крайний пин. глюченный какойто.
AM-312 pull-down не нужен, out средний пин. мне эти больше всего понравились. могут работать и от акума (менее 5в) и от БП 5 вольт. маленькие по размеру и потреблению тока. Но есть один нюанс. У меня их не получилось притянуть к земле они сами имеют подтяжку. Поэтому когда приходит звонок или смс, срабатывает тревога (получается ложная). Кто сможет это исправить пожалуйста сообщите.
Более подробное описание в разделе
Подключение.
Распиновка и выводы
ATmega328P
#define Pin11 bit(PB3) //sensor 3
#define Pin10 bit(PB2) //sensor 2
#define Pin9 bit(PB1) //sensor 1
#define Pin8 bit(PB0) //sensor 0
#define ExtPwr bit(PB4)// D12 пин тревоги отключения напряжения 220 вольт
#define AOFF bit(PD2) // D2 - INT0 кнопка включения отключения сигнализации.
#define BELL bit(PD4) // D4 - пин внешней сирены или любого другого устроства которое будет включаться на время до 3 минут
#define BOOT bit(PD5) // D5 - пин загрузки модема
#define LED bit(PB5) // D13 led
ATmega32U4
#define Pin11 bit(PB7) //sensor 3
#define Pin10 bit(PB6) //sensor 2
#define Pin9 bit(PB5) //sensor 1
#define Pin8 bit(PB4) //sensor 0
#define ExtPwr bit(PB2)// Mosi пин тревоги отключения напряжения 220 вольт
#define AOFF bit(PD0) // D3 - INT0 кнопка включения отключения сигнализации.
#define BELL bit(PE6) // D7 - пин внешней сирены или любого другого устроства которое будет включаться на время до 3 минут
#define BOOT bit(PC6) // D5 - пин загрузки модема
#define LED bit(PC7) // D13 led
Подключение
В случае с PIR AM312 средний вывод сенсора на любой пин ардуины (
D8-D11) без резистора/заземления.
Пин контроля внешнего питания
ExtPwr — просто от блока питания 5В плюсовой вывод на этот пин. Без делителей напряжения и прочего. Когда нет 220В то на этот пин не идёт высокий сигнал и сигналка срабатывает. Но если у вас ардуино 3,3 вольта то конечно делитель напряжения надо. Также делитель напряжения нужен если у вас ардуино 5В но блок питания скажем 7В. Если у вас питание только от акума то вам не нужен этот пин.
Если у вас питается и от сети и от акума, подключение акума к сети делаете так —
mysku.club/blog/ebay/43282.html#comment1930875 Это чтобы не использовать акум когда есть 220.
Саму ардуину запитываете либо через
USB порт либо через пины
Vin (если БП более 5В) или
5V (если БП 5В или акум).
От блока питания/акума отдельная линия питания идёт на датчики. Чтобы они подолжали работать даже если ардуино выключится.
Кнопка включения отключения режима тревоги реагирует на землю т.е. пин
AOFF, когда нажата кнопка подключенная к этому пину, должен притягиватся к земле.
На
BELL пине при срабатывании тревоги появляетмя или лог 0 и лог 1 (настраивается) тем самым можно через реле или еще как, активировать какоето устройство, например здоровый школьный звонок в качестве сирены :) (у соседа в совецкие времена когда еще не было ЧОПов висел такой). Ну или пожарную сигнализацию для ардуино. Как её подключать можно подсмотреть в этом обзоре сигнализации на ардуино —
kolotushkin.com/article.php?id=33
BOOT пин через резистор 4,7 или 10 кОм просто подключается одним проводком к BOOT модема.
Модем запитывается либо отдельной линией либо через ардуино либо ардуино запитывается через модем (если на модеме дублируются пины питания). На своем 590 я вместо понижающего диода (который понижает напряжение с 5 до 4.2В) поставил перемычку. Модем прекрасно работает от 5 вольт. Перемычка мне дала то что у меня с двух сторон 5В и я могу ардуино запитывать через модем. Но каждый решает сам понижать напряжение для модема или нет. Главно помните что основные глюки и рестарты изза плохого питания модема. Лучше еще танталовый конденсатор подключить к выводам птания.
D13 пин можно использовать как внешний лед (либо использовать встроенный в ардуино)
У модема и ардуино обезательно общая земля. Tx модема на Rx ардуино. Rx модема на Tx ардуино.
Если плата 32u4 то используется Serial1 (PD2/PD3)
Настройка и синтаксис
Первая команда которую вы отправляете на модем должна быть RESETC. После этого необходимо произвести первоночальную настройку сигнализации (добавить номер, режимы и тд).
Длина смс с командами которые вы отправляете на модем максимум 64 символа.
Команда имеет формат ЧТО_НАСТРАИВАЕМ: НОВОЕ_ЗНАЧЕНИЕ например: SLEEP:OFF или SMS:0 или ADMIN:591691791
Номер телефона всегда указывается только номер без кода страны/региона макс длина 10 цифр.
Простые команды которые имеют только два состояния, можно передовать все в одном сообщении через пробел, соблюдая максимальную длину, например: SLEEP:ON S0:OFF и тд.
Если отправляете длинное смс (длинее 64) то модем не обработывает непоместившиеся команды.
Сложные команды (где длиное значение/текст) лучше передовать по одной, например номер админа, баланса и тд. Вы можете попробовать их объеденять по 3 или более команд в одно смс, но тогда результат проверять фактически. Если сигналка сообщила что ок значит ок (5 быстрых вспышек). иначе укарачивайте команду.
Проверить состояние конфига нельзя. Поэтому если сомневаетесь/запутались. Сбрасываем одной смс RESETC и другой смс настраиваем заново.
О логике работы
Модем регистрирует сим и регистрируется в gsm сети. Если это не получается он рестартуется. Если получилось модем после регистрации переходит в режим ожидания смс команд.
Во время ожидания команд, датчики не вызывают тревогу. Но зато в режиме ожидании команд лед сигнализирует будет ли потом включена охрана или она выключена. Охрану можно выключить кнопкой или по смс.
После рестарта ардуионо, режим перехода в охрану — после ожидания команд — всегда включен. Даже если до этого охрана была выключенна кнопкой или смс.
Далее после нескольких минут ожидания команд модем становится непосредственно на охрану.
При этом охрана может сопровождаться с уходом в сон (экономия энергии). Уход в сон это когда модем выключается. Ардуино выключается. Под питанием остаются только датчики. Из этого режима (охрана во сне) ардуино просыпается только если сработал датчик тревоги. Получается если находится в этом режиме (от батарейки) и сенсоры никто не беспокоит очень долго то когда сядет батарейка вы об этом не узнаете. Проверять напряжение во сне прошивка не умеет. Т.е. оставлять без присмотра, гдето в поле, на год и более не рекомендуется.
В охране кроме датчиков тревоги может участвовать пин напряжения сети 220В. если пропала или появилась сеть — будет тревога.
Если охрана без ухода в сон, то смс команды будут работать и в охране но скорее всего приведут к срабатыванию сигнализации (ложно).
Смс не сработают, если приём этого смс совпал с уходом в сон, или уже во сне, со звонком как на сигнализацию так и от сигнализации и т.д. Т.е. например если вы отправили команду и тут же (сразу) получили звонок тревоги то ваша команда не сработала но зато вы узнали что есть проникновение в периметр охраны, смс команду придётся отправить еще раз, если это по прежнему актуально. Если вы отправили команду а прошло секунд 20-40 и вы получили звонок то скорее всего это ложная тревога от вашего смс. Кто сможет это «победить» напишите пожалуйста как.
Из выше описанной логики также следует что не отключайте режим охраны при включенном режиме сна — уйдёт в сон и не проснется. Также наоборот не включайте режим сна когда выключенна охрана(тревога).
Еще следите за временем ухода в сон и временем работы внешней сирены/звонка (если конечно включен режим внешней сирены). Время работы внешней сирены должно быть меньше того времени через которое ардуино уйдёт в сон (а в месте с ним и в режим охраны), если режим сна конечно включен. А то уход в сон при включенной внешней сирены вызывает неопределенное поведение.
После как сработала тревога, модем звонит на указанные номера и отправляет смс со статистикой и цикл повторяется. Т.е. опять несколько минут ждёт смс и потом становится на охрану. Букв много но на самом деле всё просто.
Завис не завис модем можно проверить либо по быстро мигающему леду в режиме приёма команд (если охрана не отключена), либо включить выключить охрану через кнопку или смс в режиме приёма команд, либо отправить смс команду в режиме приема команд и посмотреть на реакцию леда.
При отправке смс команд в режиме приёма если все команды в этом смс правильные и все успешно установлены то будет световая индикация. Если хоть одна команда не правильная то индикации не будет.
Про админа
При первом включении флаг ADMIN 0. После ресета флаг ADMIN 0. даже если если до этого адмн был установлен.
Когда флаг ADMIN 0 выполняем любые команды с любого номера. если 1 только от ADMIN
Флаг ADMIN 1 когда по смс отправили ADMIN:795695555 [ваш номер].
Добавить второй номер (только для получения звонка и смс о тревоге) командой ADMIN2:795795795 может только админ. команды второй номер отправлять не может. длина и регион второго номера должна быть как первый.
Удалив админ номер автоматом удаляются админ права и второй номер. Удалять может только админ.
После тревоги если есть телефон в еепром он автоматом становится админом. даже если админ не был установлен.
Про кнопку остановки охраны
Если тревога уже сработала (допустим хозяин зашёл) и хозяин (или даже не хозяин если знает где кнопка и что она делает) нажал стоп то звонок всеравно пройдет а потом уже охрана не будет реагировать на сенсоры. Повторное нажатие активирует охрану. Но в настройках «отложенное реагирование» на тревогу т.е. сигнализация срабатывает например через 30 сек после обнаружения тревоги в охроняемом периметре. Это сделано для того чтоб хозяин мог зайти нажать (секретную) кнопку и ардуино не будет звонить и отправлять смс. Но охрана остается выключенной. Если её включить повторно до условного времени (в нашем примере 30с) то звонок и смс будут. Получается если вам нужна и дальше охрана её повторно надо включать после 30 сек и до ухода в сон/охрану.
Если встеки вы забыли нажать второй раз (для включения, а охрана вам нужна) и сигналка ушла в сон (настроенна именно на сон) то вы больше не будете получать звонки о тревоге. Чтобы включить обратно надо, чтоб сенсоры сработали (ардуино от сенсоров просыпаться будет но не будет звонить т.к. модем не включается) и когда сигналка выйдет в режим приема команд (примерно через 20-40 сек) при этом лед горит постоянно, надо повторно нажать кнопку.
Если вы через смс выключите охрану с уходом в сон то обратно через смс включить не сможите тк. модем больше не включиться, только через кнопку можно будет включить охрану.
Другими словами будьте осторожны с выключением чего либо когда включен режим сна в котором модем тоже выключается.
Световая индикация
Стандартный 13 пин (или можите пользоваться диодом на ардуино).
Если быстро мигает в самом начале при включении значит у вас либо сим пароль либо не ловит сеть.
Когда сигналка в режиме охраны она мигает коротко раз в секунду
Когда сигналка без охраны она горит постоянно.
Когда набирает номер, сработал датчик, поиск сети и пару других режимов тоже горит постоянно но эти режимы короткие по времени. например примерно 30-40 сек позвонить на один номер и ждать 3 гудка. потом постоянное свечение как правило должно перейти в режим охраны. если у вас горит постоянно и долго это либо отключена охрана либо он завис.
В режиме ожидания команд, если вы отправли смс команду — будет быстрое моргание сигнализирущее что все команды правильные и успешно примененны.
Если нет никакой сигнализации на отправленный смс значит хоть одна из команд не правильная.
Если отправили длинное (длинее 64 символа) смс (оно отправится) и команды которые поместились обработались (все) успешно то модем проморгает быстро (SMS_OK) но при этом он не обработает непоместившиеся команды и вы об этом ни как не узнаете. Следите за длиной смс.
Если у вас предложения по добавлению дополнительной лед индикации (определенные моргания для 13 пина) буду рад услышать.
Список команд
SMS:0 - не отправлять смс статус
1 - отправлять только на первй номер. по умол.
2 - на оба
S0:ON - задействовать нулевой сенсор для обнаружения тревоги
OFF - выключить
S1:ON - задействовать первый сенсор
OFF - выключить
S2:ON - задействовать второй сенсор
OFF - выключить
S3:ON - задействовать третий сенсор
OFF - выключить
по умол все сенсоры включены
S0LV:HI - логический уровень 0сенсора когда нет тревоги выставить как высокий
LO - как низкий
S1LV:HI - логический уровень 1сенсора когда нет тревоги выставить как высокий
LO - как низкий
S2LV:HI - логический уровень 2сенсора когда нет тревоги выставить как высокий
LO - как низкий
S3LV:HI - логический уровень 3сенсора когда нет тревоги выставить как высокий
LO - как низкий
по умол все низкий
CALL:0 - не звонить когда тревога
1 - звонить только на первый. по умол.
2 - на оба
BELL:ON - задействовать пин внешней сирены (или другого устройства) [ВКЛ]
OFF - выключить [ВЫКЛ]. по умол.
BPLV:HI - логический уровень внеш сирены когда есть тревога выставить как высокий. по умол.
LO - как низкий
BELLT:10..180 - время в сек, в течении которого будет подаваться заранее выставленный лог уровень на пин внешней сирены. 30 по умол.
BEEP:0..9 - сколько условных гудков звонить на номера. по умол 3
ADMIN:номер без локального регионального кода. может отправлять команды
ADMIN2:номер без локального регионального кода. длина обезательно как в первом.
ALARM:ON - задействовать срабатывание тревоги. по умол.
OFF - выключить
SLEEP:ON - задействовать режим сна
OFF - выключить. по умол.
POWER:ON - задействовать режим тревоги когда пропала сеть 220. если питание только от батареи не нужен.
OFF - выключить
DELAY:0..250 - время задержки до срабатывания тревоги в сек. через сколько будет тревога когда сенсоры уже обнаружили проникновение. 0 по умол т.е. без задержки сразу.
GETBAL:ON - получать баланс симки в репорте
OFF - выключить. по умол.
BALNUM:ххх - номер с которого получать баланс в USSD режиме например *100#
AWAKET:3..60 - через сколько минут уходить на охрану/сон и сколько минут ждать смс команды от админа. 3 по умол.
DELTEL:1 - удалить админ номер и второй
2 - удалить только второй номер
PREFIX:0 - перед номером добавляется - 0. по умол.
1 - +7
2 - +373
3 - +375
4 - +380
RESETA - ресет ардуино
RESETC - ресет конфига
BALANCE - отправить админу смс репорт сейчас
Конфиг модема
//if (!send("AT+CSMS=1")) return false; //phase 2+ чтото глючит при включение
//if (!send("AT+IFC=1,1")) return false; //software flow control
//if (!send("AT+CMEE=2")) return false; //extended error code
//if (!send("AT+CCLK=\"yy/MM/dd,hh:mm:ss\"")) return false;
//if (!send("AT+CSTA=129")) return false; //local number type with leading 0, не работает
if (!send("AT+CPBS=\"SM\"")) return false; //phonebook to SIM
if (!send("AT+CPMS=\"SM\"")) return false; //sms to SIM is saved after power off
if (!send("AT+CSTA=145")) return false; //int format with leading +, не работает
if (!send("AT+CMGF=1")) return false; //sms text format
if (!send("AT+CSCS=\"GSM\""))return false;
//(2,1)+CMTI: "SM",n;
//(2,2)lowlevel<cr><lf>+CMT: "+373795557555",,"21/08/08,17:12:09+18"<cr><lf>Text body<cr><lf>
if (!send("AT+CNMI=2,2")) return false; //считать lowlevel на INT0 чтоб знать сколько смс пришло
if (!send("AT+CLIP=1")) return false; //+CLIP: "060260202",129,,,"",0
if (!send("AT+CSDH=0")) return false; //don't display header
if (!send("AT+CSCB=1")) return false; //don't display cell broadcast messages
if (!send("ATE1")) return false; //echo on
Что делает модем
if (!send("ATDвашномер")) return false;
if (!send("AT+CMGS=вашномер")) return false;
if (!send("AT+CUSD=номербаланса")) return false;
Прошивка
Обычный hex файл для прошивки через USB посредством avrdude из Arduino.
Файл *with_bootloader.hex для прошивки програматором.
Если мега
328p то можно прошить либо программа
XLoader либо командой (при условии что у вас стоит ардуино
IDE на диске C: а плата на
COM7)
C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -C«C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf» -patmega328p -carduino -PCOM7 -b115200 -D -Uflash:w:«D:\Files\alarm.hex»:i
Если 32u4 то надо узнать какой порт именно во время прошивки (обычно на один меньше чем где Serial) и такой командой (при условии что у вас стоит ардуино IDE а плата на COM14)
C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -C«C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf» -patmega32u4 -cavr109 -PCOM14 -b57600 -D -Uflash:w:«D:\Files\alarm.hex»:i
disk.yandex.ru/d/-ng7FTKKAAuatQ
PS: Это мой первый обзор. Не судите строго
например почитайте описание библиотек SoftwareSerial, AltSerial, NeoSerial
есть сильные, есть слабые стороны, есть компромиссы. это нормально ;)
Но, зато сейчас всюду есть безлимит в родной сети. И сейчас оптимальный способ управления через ДЖСМ2 это управление посредством сигналов ДТМФ. Модемы СИМ800 поддерживают ДТМФ и вполне без особенных проблем возможна реализация такого управления.
Нужно оформить статью и выложить, проекту уже года 3 как, пара сотен «китайцев» прошито.
Для тех, кто не понял фишки:
Мне предлагают оформить на свой паспорт свою симку. За свои деньги выпустить её в инет. На свои деньги купить комплектующие и за своё время всё спаять. Влить чужой закрытый код. И самому послушно оплачивать трафик. Веря честному слову незнакомой фигуры из интернета, что в том коде сигналка.
Нет уж, спасибо.
Без схем и исходников — этого тут не надо.
Дбавил в описание раздел дисклейм + критика. Если остануться вопросы спрашивайте.
Разве что третий вариант, как сделал автор — посмотрел, взял, и написал своё!
Даташиты изучаются за 2-3 дня
Итого — зная язык си, пишем программу, изучая даташиты — итого выходит 5-7 дней при знаниях это займёт
А я имел ввиду с глубоким изучением и практикой
Выучив язык си за неделю ты сразу же не станешь писать мега крутые проекты
Автор пишет что у него (по его оценке) кривой код. Так почему он не взял открытый чужой оптизированный многими другими? Или он хотел пройти путь от начала до конца чоб научится програмировать. Зачем тогда с самого начала посылается на посты других?
Возможно в приобретением опыта и знаний он возмется написать свою операционную систему. Возможно не лучшую, но свою. :) Есть такой синдром.
А пока вы пишите вот вам мои 2 копейки.
Есть у меня несколько удачных, Ардуино библиотек. Первая с 30..50 скачиваний в день и кол. уникальных посещений 20тыс за полгода. Где-то на 10тыс, только один указал на серьёзный баг в работе с esp32. Те остальные тупо туристы-нахлебники с Ардуино головного мозга умеющие только copy-paste — Не работает? Качаем следующую. Вдумайтесь, из 10тыс никто даже не написал о проблеме! Я уже не говорю про высший пилотаж — написать код как эту проблему решить.
Второй пример. Еще одна удачная библиотека, написанная мной 5 лет назад, тогда я только учился писать код. С тех пор не обновлялась. Кол. посещений на сегодняшний день около 6тыс. Недавно решил её использовать и обновил до сегодняшних реалий arduino esp8266 и arduino stm32. Пока переписывал, сам у себя нашел пару неоптимизированных участков. Итого за 5 лет из 6тыс. никто ничего этого не заметил и не предложил.
Я могу продолжить, у меня ещё есть…
Когда мне говорят — Вот если есть исходники, я могу сам подправить или добавить функционал под себя. Угу, ага. Обычно они же потом бегут к тебе в личку и с просьбами — я вот тут убрал, добавил, а оно не компилируется, не работает. Посмотрите пожалуйста, по братский?
Ну и для справки вам, по статистике только 2%..5% пользователей интернета генерирует его контент, осталальные 95% биомассы тупо потребители.
если это большой известный проект и я им тоже часто пользуюсь я заношу баг. если это мелкая библиотека или малоизвестный автор я как правило исправляю для себя но не рапортую. так что цифра что из 10 тысяч буквально 2-3 случая я верю без проблем.
а вывод (впринципе в опенсурсе) если автор выложил — говорим спасибо. нет ну и ладно (это его воля) и нет тут никаких: так он же тоже гдето учился тоже использовал открытый код и т.д.
мне вот код автора совершенно не нужен (сиди разбирайся в этой лапше), я сам напишу как я хочу и исходя из своего чувства прекрасного.
интересны только конечный функционал устройства (многие функции действительно полезны, но ты про них даже не догадываешся), подводные камни и особенности (глюки) оборудования используемые в устройстве.
Я вот в юности тоже считал, что нужно всё СВОЁ, но потом приходит осознание, что на это слишком много времени тратится, если так писать всё своё то за пару лет может и закончишь проект
Это уже проект не ради выполнения какой-то нужной задачи, а проект ради проекта
Вот гос-во даже операционную систему свою не может сделать
А телефоны? Почему не осталось больше телефонов с другими ОС, кроме как айос и андроид, ибо это сложно, долго и дорого (и на перспективу может быть убыточно)
Используют уже готовые наработки
Кто то просто качает для просмотра, кто то может исправил и ему незачем или тупо лень бежать сразу же к вам и говорить — а вот тут надо было сделать так(а вы думаете что вы пуп земли и без вас тут никак)
И зачем е вам обращаться тем, кто подправил и оно работает?
Логично, что будут обращаться большинство не очень шарящих
Остальные 95% населения шьют вам штаны и водят ваши машины «скорой помощи».
Очень давно, году так в 2003-2005-м (не помню точно) я купил процессор core 2 duo. Собрал системник, поставил в него SB Live! и вдруг обнаружил, что при попытке декодирования ac3 система уходит в синий экран. Разочаровался, но делать ничего не стал. А чуть позже заметил, что powerdvd при попытке декодирования того же ас3 заваливается с ошибкой в неком ivaudio.ax. Решил посмотреть, что там. Открыл дебагер и увидел в этом месте какую-то странную команду ассемблера — я такую не знал. Стал гуглить, оказалось, она для алтона. Но у меня core 2 duo.
Стал разбираться, выяснил, что из-за неправильного использования cpuid библиотека ошибочно определяла, что у меня атлон и пыталась использовать оптимизированный для него декодер. Исправил бинарник (просто зашил подходящий результат cpuid) — powerdvd стал работать. Тогда я вспомнил про синий экран и решил посмотреть в драйвере. И обнаружил там точно такой же код. Исправить смог только под 98, т.к. отключать требование подписи драйвера в хр тогда не умел.
После этого обратился в поддержку креатива, описал детально ситуацию. Мне ответил человек, что, если драйвер определяет мой компьютер как атлон, надо обратиться к поставщику компьютера. Затем, что драйвер надо переустановить. Я ему еще раз объяснил, что проблема в самом драйвере. Еще через пару писем его ответ меня просто поразил: «найдите на нашем сайте контакты разработчиков и обратитесь к ним».
Находил баги в OCCI — библиотеке для поддержки оракла. Но у них вообще, не имея подписки, создать обращение в поддержку было невозможно.
Также имел пару неудачных обращений и к авторам опен-сорс проектов. От «спасибо, обязательно поправим» без последующих изменений до «мне сейчас некогда заниматься этим проектом, поправь сам».
Какой вывод для себя я сделал — если нахожу небольшой баг в опер-сорс коде, чаще проще и быстрее его исправить самому и забыть. Если нахожу большой — тут можно и к автору обратиться, но исправит ли он?
Возвращаясь к нашей ситуации — тут раздел диайвай. Будем честными, вряд ли много кто найдет баги в коде и напишет автору, но вот подправить код для себя могут захотеть многие. А кто-то может посмотреть код и написать потом свой. То есть, пользы от открытого кода в данном разделе несравненно больше.
Например, у меня есть идея — сделать простую звонилку. Коробка, на ней три кнопки и, возможно, один светодиод. Нажимаем кнопку, устройство звонит на определенный номер (там скидывают) и все. Были бы тут открыты исходники, я бы посмотрел команды инициализации модема и быстро написал свой код, тем более, ничего другого мне не надо. Может быть, даже на tiny13 получилось бы :) (хм, хотя, похоже, конфиг-то как раз в статье есть)
А так, если руки дойдут, надо будет искать в инете.
но к слову далеко не новорег, но старый акаунт после переезда домена не работает. если вы знаете как его вернуть буду признателен. alex68md.
админам писал. ответа нет.
~$3 + датчики, +20' времени (в реальности, конечно, всё равно целый день;)
это дико неприятно, и автор очень зря «зажал» понаписанное, даже без традиционной отмазки «у меня там в коде не прибрано и вообще здесь рыбу заворачивали»,
НО,
чего вы боитесь больше: что там майнинг во всю ардуинскую мощь,
или что оно будет рассылать прямо в органы что-то непатриотичное про новое платье короля?)
[ «он сможет отключить мой датчик протечки», надеюсь, не обсуждается, — автору явно не три года; ]
Тарифов честных, подходящих под эксплуатацию подобных вещей, всё равно давно нет, только дикие «безлимитные» пакеты — вот проблема, почти
дезактуаделающая бесполезной данную разработку:\да и в правду проект начинался когда смс во всю в ходу были… но к слову у нас с этим и сейчас проблем нету НО да тендеция намечается (интернет увеличивают/смс урезают)… тут люди добрые подкинули идею с DTMF… конфиг модем через тон. сигналы было бы интереснее (чем через смс)?
PS: изначально я не планировал выкладывать в паблик впринципе, делал чисто для себя под свои задачи… но со временем сложность/алгоритм росли и даже если оставлять чисто для себя необходима была универсальность кода и понятное его общение с человеком, и я подумал — а поделюсь, может комуто будет инетерсно попробывать или подкинуть хотябы интересных идей.
Это же коммерческий продукт!
Наверное…
Обидно. Потратил время на чтение этого потока в надежде понять.
Понял только, что на понимание этот материал не рассчитан
Второй раз тратить время как-то не хочется
:-(
перманедлительной невозможности связаться с базовой станцией (задержки, количество повторов, попытки перезагрузиться..)это не работает с предварительным предупреждением, типа "иду на вы"
увы, — нет.
Ну и раз вы заговорили о 2х амерном бп, то вангую у вас sim800, а на него зоопарк прошивок, разной степени глючности. Например, некоторые не по стандарту принимают sms о платной подписке и провайдер расценивает это как согласие. Вобщем не завидую я вам.
Тем кто уже собирал сигналки с этого сайта — ничего сложного. По элементам тоже всё похоже. По этому я и указал стаьи первоисточники. Минимум это модем, ардуино и один сенсор (напрмиер АМ312) и уже будет работать.
У меня кстати Neo 590. Но должно работать и на sim800 там тоже самое. У меня используется минимум стандартных команд — проблем не должно быть. Глючность тестировалась не один меясц. Если питание надежное ничего глючить не будет. У большинства глючность потому используют блокирующий код и не поверяют ответы. У меня это учтено.
Была статья на хабре про hackerSIM
Я не профессиональный программист, но делал несколько проектов на ATMega и прекрасно представляю, что возможностей Меги32 больше чем достаточно для такой GSM-сигнализации с любыми мыслимыми функциями. Конечно, если не нужно писать и передавать видео, держать онлайн связь через инет и нечто подобное. А вот звуковые функции, управление исполнительными реле, контроль температуры в доме, передача состояния объекта и управление смс через GSM, работа с электронными ключами-таблетками — на все это МК вполне хватает.
А что там надо? Из заметного- управление через интернет ( приложение). Удобней
Это аварийное питание. Основное- 220. И потребление тут не слишком важно
Очень узкая сфера у таких устройств- дача Если есть интернет стационарный, то выбор гораздо веселее, вплоть до умных домов
В чем состоит концепция?
На пин внешней сигнализации / сирены можно впринципе повесить что угодно — но тем кто дружит с микроэлектроникой. Если выходного уровня 3 минуты хватает. Ну например просто как стартовый импульс. Бесконечно длго этот пин выдавать уровень не будет.
Я сам не паял на этот пин ничего сложного — советовать не буду
Признаться, я и сам такое делал, лет 10 назад. Аж семеро человек нашлось, кто поставил. Трое из них пинговались три года, а потом мой хостер закрылся, я уже не стал домен переносить и заморачиваться с хостингом.
Да и что реально даёт доступ к вашей неизвестной ардуине? Которая может просто стоит на столе для изучения? Или вы думаете я буду ездить по всем бывшим Республикам с каким-то спец приборами и вычислять слабое звено?
У вас намного больше личной информации утекает через телефон, телевизор, ip камеры и тд. А вы ищите подвоха в ардуинке на форуме где делятся своими не коммерческими проектами.
Вы исходник не выкладываете, чтобы ЧТО?
заброситьпонять нужно ли оно). ну или просто лень паять. в инете есть открытые примеры работы — буду изучать в ближайшее время. целевое использование — мониторинг удаленной дачи или строящегося дома (в котором отопление уже включено, но ремонт не доделан и на постоянке никто не живет — следить за температурой)Т.е функцию «сигналка для дачи, включить отопление » выполнить может без написания прошивок самому?
оговорка исключительно про мою ситуацию — имеется строящийся дом у тестя с работающим отоплением но отсутствием отделки (и постоянных жильцов). нужно следить не вырубилось ли электричество или отопление — чтобы не померзли трубы. ну и не пришел ли кто посторонний. сейчас там трудится собранная на коленке конструкция на АТМеге
Если хотя бы полусамодельное, с большим сообществом, где можно взять ( почти) готовое, ну или кто то продает прощивки ( типа 1М, часть прошивок бесплатна), а так… на любителя. Мнение чуть продвинутого пользователя, который немного в теме. На истину не претендую
У меня на даче стоит сигналка с модулем SIM300, она мне уже надоела. Часто отрубают свет (сама сигналка оснащена аккумом) и близлежащая вышка тоже выключается, после восстановления электроснабжения сига остается «вне сети».
Иногда вышку, возможно, перезагружают, и тогда и без отключения света сигналка снова «вне сети».
Я думал к ней таймер прикрутить и передергивать по питанию раз в сутки, но она не запоминает состояние, снимается с охраны.
А если к моменту постановки глушака модуль в сети, то у него больше шансов сообщить о проблеме звонком или смс.
В данной конструкции вы гасите модуль и подымаете по сработке, чем играете на руку любителям глушилок.
Хотя при батарейном питании увы никак иначе.
Да и такие поделки ставяться на охрану помидоров, отслеживания 220В, и защиту от дурака :)
Не совсем правильно их ставить на охрану реальных ком. Объектов.
Если этого почему-то не произошло — внешний ресурс ждет еще пару минут и поднимает вой на весь интернет. :)
Глуша при этом GSM и WiFi? Я бы таки с подозрением отнесся к таким тестированиям и профилактикам…
но добавил и картинки ;)
После такого — хочется написать прошивку ещё лучше и выложить исходный код в интернет"
В принципе так и делал пару раз
Считаю что код на мк должен быть открытым, чтобы понимать как это работает, может там написан плохой код, который при условии >1 каждый тик выполняет задачу, когда можно написать ==1, чтобы задача срабатывала единожды, а не каждый тик
И это ещё не самое худшее
Я поэтому и выложил сколько занимает скетч и рам. при том что у меня нет блокирующего кода, у меня паралельно принимается/отправляется смс и прослушиваются сенсоры и прочий функционал.
единственное что я изменил на ардуино уменьшил сериал буфер до 32 (а не увилечил как kvolk) скетчу хватает скорости и справиться с 32 буфером.
плюс в раме 64 бит буфер для моего смс. итого из 128 байт оперативки 96 отдано на буфер итолько 32 используется для нужд программы.
Опять удалось
Сразу всё становится понятно и про именование и про комменты.
Вы наверное это не выкладываете, потому что думаете, что написали нечто крутое и этим крутым не хотите делиться с другими? Ибо вы столько труда вложили
Но может это крутой код только с вашей точки зрения и точки зрения первого проекта))
а у меня реально кривой код… который даже стыдно показать. не нравиться он мне. пока думаю как изменить главный цикл чтоб был и быстрее и красивее. как придумаю выложу.
для меня это первый проект. переделывалась логика несколько раз. ну так всегда проихсодит когда «по ходу пьесы» меняются требования/алгоритм. а они всегда меняются когда нет опыта :) поэтому интересно а оно вообще работает у других. понятна другим логика работы или надо чтото упростить переделать… и тогда уже может выложу чтобы как вы сказали общими усилиями «причесать»
Мне бы, например, была интересна логика обнаружения зависания модема, неотправленного сообщения или несостоявшегося звонка. Я её решил «топорно», но даже так приходится парсить ответ модема, учитывая при этом, что первоначальное «ок» на отправку команды на звонок вовсе не является гарантией успеха, и что через некоторое время модем может выплюнуть ещё что-то.
И таких моментов масса. Так что было бы интересно взглянуть на Ваш код. Даже тем, кто не страдает паранойей :)
у меня тоже топорно. а как я понимаю и нет других способов. это же не протокол с подтверждением пакета.
логика обнаружения зависания модема — тупо нет сети. нет нужно ответа ресет. с запоминанием состояния.
неотправленного сообщения — тут два варианта. если нет подтверждения успешной отправки (когда денег нет например) нормально обрабатываем. а вот если ушло но на самом деле не пришло — тут никак не обработаешь. но у меня такого и не было. было только один единственный раз что смс якобы ушло. а я его не получил. но получил его когда через время второе отправил.
несостоявшегося звонка — было буквально 2-3 раза за оч длительно время. OK получаешь но звонка нет. получается можно пренебречь такими случаями но и борьбы с ними нет. а вот чаще бывает изза плохого питания (или соплей вмесо контакта) что во время звонка модем зависает/отрубается но тут просто проверил сеть — нету. рестарт.
Дверь открыли — контакт замкнулся, питание пошло на сигналку (плюс вкл. ключ или реле параллельно контакту на двери, чтобы не выключилось при закрывании двери), она загрузилась, отзвонилась и отрубилась.
Потребление в режиме ожидания — ноль. С блоком обычных батарей (в герметичном корпусе) может несколько лет ждать срабатывания. Нужно только SIM-ку «подкармливать» чтобы не заблокировали (например, автоплатёж 1 руб в месяц).
А если по рублю, то это уже получится не голому рубашка, а одетому Майбах))
А мне хочется, чтобы у голого была рубашка, а не у одетого Майбах))
Сигналка может только «подъедать» баланс, отправляя SMS, по встроенному календарю или в ответ на входящую SMS (запрос статуса).
Вот только находящаяся «в глубоком сне» сигнализация это не сможет сделать. А личный кабинет «Клиент-Банка» крутится 24х7 силами самого банка.
Остаётся вопрос — хватит ли движения по счёту на 1 рубль в месяц для сохранения статуса активного клиента, или оператору требуется ещё и расход средств.
Тогда не нужно вообще заморачиваться с электричеством, аккумуляторами, проводами, датчиками. Механические системы плюс правильно подобранные заклинания обеспечат вам истинную автономность на протяжении не только лет, но и веков и, даже не побоюсь заявить, тысячелетий. Примеры систем можно увидеть в фильмах: «Мумия», «Лара Крофт расхитительница гробниц» и др.
Для «дальней дачи» (дача, склад, лабаз, контейнер на площадке хранения, лодка, нычка) без электричества, не посещаемой всю зиму (или посещаемой нестабильно), нужна автономность в пол-года, а лучше ещё с запасом.
Какие аргументы у вас будут для жены, приятелей, ...(собаку вычеркиваем) в оправдание своего «альтернативного» подхода к автономности сигнализации?
Что касается 590го модема — забудьте про него, просто не используйте его в своих проектах, есть менее глючный sim800l, но и он не идеален.
ЗЫ. Ссылка в тексте не работает:
точку после html уберите или пробел добавьте.
и щаз ещё не поздно добавить обещалку в дисклеймер
теперь по делу:
вот одна из непонятных (и провоцирующих потенциальное недоверие;) странностей: просто от факта компиляции под другую платформу RAM'a вдруг более чем удвоилась. Что это — пустяковый дефект кода (типа int… byte… #default;) или(1%;) нечто другое?
и молдавский номер какой-то) в конфиге забыт|«забыт»
один сигнал служебный, длииинный — и потом столько коротких «точек», сколько команд из СМС прошло (обработка строки ведь после первой же ошибки прерывается?)
хотя, пока мы живьём сидим «у печки», всё можно и через порт посмотреть?..
это потом вся «морзянка» станет только развлечением для тараканов)
номер не забыт а показан пример что будет при таком конфиге модема… пробовал разные конфиги остановился на таком. прошивка расчитана на разные странны (молдова в том числе). все страны указанны в prefix.
смс после первой же ошибки прерывается? нет. выполняется до конца и в конце может даже успешно применится (если правильно) просто в целях экономии РАМа все моргания по [маске] так сказать… считать успешные можно (вроде не сложно) но увеличит рам т.к. моргание живое (каждый раз считать надо) а не по маске. но даже если сделать пользы мало. 5 раз могнет а 10 команд было. какие 5 не сработали не понятно. по сути мало чем отличается от моего варианта. хоть одна не прошла мы сообщили юзеру. а дальше или юзер ищет опечатку или разделяет длинную команду на более короткие. и таким способом находит проблеммную команду. да согласен не так удобно как в смартфонах или компьюетерах. но и ресурсы у МК другие…
ну да всё это балоство с настройкой это в начале поиграться… у меня по итогу в смс сохранена одна длинная команда которая сразу всё настраивает и даже не смотрю индикацию.
вот правда, потому и особого значения этому всему не придавал
я к тому, что это «просто номер» и случайный звонок на него не нарушит ничьего покоя?)
очень похоже на то, что тип переменных у вас описан нестрого, и компилятор в первом случае отводит под каждую один байт, а во втором два (ну или два-и-четыре)
при текущей нашей ситуации с тарифами — да, хотя это и крохоборство (при спокойном сценарии использования сигналки:)
ставя себя на место жадных операторов связи), не могу придумать, как можно было бы «красиво» закрыть потребителю и эту лазейку
так что «да» — DTMF это не просто сегодняшняя мода, это перспективно, и удобно, и универсально (можно хоть тексты полубайтами передавать;), и готовые библиотеки чуть ли не для Attiny13 есть…
И ещё, — ваш проект может прекрасно обойтись без него))
да нет все переменные жестче некуда :) я в детали не в никал… примерно представляю но не копал чтоб точно сказать куда идут доп память… точно изза сериал может еще чтото (там таймеры и прочее… у микро их поболее)
«ваш проект может прекрасно обойтись без него)) „
на выходные полез немного улучшить логику… так наулучшал что всё разрослось и запуталось — вернулся обратно )) вот и я думаю от добра добра не ищут… ну может опять ради изучения ради процесса когдато и запилю dtmf…
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.