GSM сигнализация
- Войдите на сайт для отправки комментариев
Во многих случаях использование arduino сводиться лишь к миганию светодиодами или роботам, которые хороши лишь как игрушки. Ведь для развлечения и был создан этот конструктор. Для меня же задача стояла быстро, максимально используя типовые или готовые наработки изучить и применить МК при создании системы умного дома для себя.
Как раз на этапе изучения протоколов общения с разными датчиками встала задача быстро (в течении недели) оборудовать коробку дома GSM сигнализацией, чтоб местные маргиналы не утащили материалы быстрее чем я успеваю подвозить их.
Приглашенный специалист выкатил условия: базовый блок (с базовым функционалом)= 300$, датчик движения 25$ (простой, только PIR сенсор), монтаж 300$.
Так как в планах стоит интеграция всего и всях в одну систему, я решил не просто прикинуть, а сразу собрать сигнализацию на Arduino с возможностью дальнейшей интеграции в одну систему Умного дома. Сейчас мне видиться наиболее приемлемым вариантом Ethernet протокол с Majordomo на сервере для сбора данных в базу данных и сложных сценариев работы.
Итак задача: GSM сигнализация на Arduino c использованием обычных (читай дешевых) датчиков движения.
Так как сроки поджимали, и ожидать железа из Китая не было времени, покупалось с рук: Arduino Mini Pro=10$, GSM shield no name=55$, и датчики движения для включения ламп освещения пускай и задорого 9$ , но зато у импортера на месте и сразу.
Датчик сначала взял один для тестов. Оказалось он отлично меня устраивает ,,
удобный корпус, начинка разделена на две части: высоковольтная (в долгий ящик на опыты) и сенсор с операционным усилителем (питание от 3 до , помоему 24, вольт).
(позитивная фотография получилась, ему уже нравиться)
Выкинув первую часть и запитав сенсор от arduino получил высокий уровень сигнала при фиксации движения датчиком и низкий при отсутствии движения (при подключении к аналоговому входу можно даже определять обрывы разных линий: земли, питания и сигнальной).
Тесты проводились на Arduino UNO, а запуск на Arduino MINI PRO.
Неприятным моментом стало появление случайной помехи на входных цифровых каналах при не подключенном датчике на MINI (помните, что документация изучается паралельно ). Как говориться у природы нет… Эта проблема стала поводом к дописыванию в setup проверки входов и исключению неподключенных из работы (естественно с информированием СМСкой о неподключенных и замкнутых каналах).
Честно признаюсь, лень – мой порок. Поэтому печатной платы у готового устройства нет . Самый простой и аккуратный спосод коммутации сенсоров стал старый коммутатор на 8 портов.
Пока я не нашел где купить гнездо I-button, так что и постановка и снятие с охраны работает только через СМС. Отправляем “on” на номер сигнализации – получаем отчет о тестировании портов и включенную сигнализацию. “off”- выключаем слежение за обьектом(естественно лучше проверять по списку разрешенных номеров).
В планах еще добавление режима “test” – ожидание сработки всех датчиков в течении некоторого времени, но это уже позже.
В итоге я получил полностью настраиваемую систему, в разы дешевле типовой, массу удовольствия и стимул заниматься этим хобби дальше.
//#include <SPI.h> #include <GSM.h> boolean armed=true; //ставим сразу на сигнализацию boolean timeout=true; //признак недавней сработки сигнализации unsigned long time;//для проверки таймаута после сработки GSM gsmAccess; GSM_SMS sms; boolean notConnected = true; char senderNumber[20]; bool Alarm;//если тру - надо ехать и бить лицо синеносым byte MaskB=B00111100; //PORTB отвечает за выводы 8 — 13 byte MaskD=B11110000; //PORTD отвечает за выводы 0 — 7;0,1- я исключил , так как отлаживал скетч через SPI,2,3- использует мой GSM шилд. String Message;//Сообщение на выдачу в СМС void setup() { // Serial.begin(9600); // Serial.begin(9600); // Serial.println("GSM Shield testing.-0"); pinMode(8, OUTPUT); //включение sim900 digitalWrite(8,LOW);// в разных GSM шилдах может быть разными порты для включения. delay(1000); digitalWrite(8,HIGH); delay(2000); digitalWrite(8,LOW); // Serial.println("GSM Shield testing.-1"); TestSensors();//проверка подключенных сенсоров // Serial.println("GSM Shield testing.-2"); // Start GSM connection while(notConnected) // бредятина какая то из примеров. На моем шилде зависало на if(gsmAccess.begin если шилд выключен. { if(gsmAccess.begin("")==GSM_READY) { notConnected = false; // Serial.println("Connected"); } else { // Serial.println("Not connected"); delay(1000);//соответсвенно в эту ветку никогда не приходил алгоритм } } if (armed) Message+="Status-armed."; else "Status- disarmed"; Message+=" setup ending."; sms.beginSMS("номер для СМС уведомления"); sms.print(Message); sms.endSMS(); } void loop() { // Serial.print(timeout); if (armed && timeout) { byte DataPinB=PINB & MaskB;//чтение входов byte DataPinD=PIND & MaskD; if (DataPinD | DataPinB){ Alarm=true;//ура поймаем бомжей Message="Security system:Alarm!Sensors port:"; if (DataPinD & B10000) Message+="1,"; if (DataPinD & B100000) Message+="2,"; if (DataPinD & B1000000) Message+="3,"; if (DataPinD & B10000000) Message+="4,"; if (DataPinB & B100) Message+="5,"; if (DataPinB & B1000) Message+="6,"; if (DataPinB & B10000) Message+="7,"; if (DataPinB & B100000) Message+="8,"; timeout=false; time = millis()+300000;//таймаут что б смс не сыпались пачками. if(!notConnected){//то ж еиз примера, на самом деле как может быть не конектед ? скетч же тогда на сетапе завис. // Serial.println("Sending of SMS"); sms.beginSMS("+номер для СМС уведомлений"); sms.print(Message); sms.endSMS(); } } else Alarm=false; } delay(500); if (!timeout) { //проверка истечения задержки if (time<millis()) timeout=true; } char c; if (sms.available()) //читаем входящую СМС { // Serial.print("Message received from:"); String message; // Get remote number sms.remoteNumber(senderNumber, 20); // Serial.println(senderNumber); // Read message bytes and print them while(c=sms.read()) message += c; if (message=="on" || message=="On") { armed=true; TestSensors(); Message+="Changed status to Armed"; sms.beginSMS(+номер для СМС уведомлений); sms.print(Message); sms.endSMS(); } if (message=="off" || message=="Off") {armed=false; Alarm=false;} // Serial.println(""); // Serial.println(message); // Serial.print("Status is - "); // Serial.println(armed); sms.flush(); // Delete message from modem memory // Serial.println("MESSAGE DELETED"); } } void TestSensors() { byte DataPinB,AndDataPinB,OrDataPinB; byte DataPinD,AndDataPinD,OrDataPinD; MaskB=B00111100; //PORTB отвечает за выводы 8 — 13 MaskD=B11110000; //PORTD отвечает за выводы 0 — 7 DataPinB=PINB & MaskB; AndDataPinB=DataPinB; OrDataPinB=DataPinB; DataPinD=PIND & MaskD; AndDataPinD=DataPinD; OrDataPinD=DataPinD; // Serial.println("Testing sensors till 255."); for (byte k=0;k<255;k++) { for (byte l=0;l<255;l++) {//накапливаем кучу данных, если они скачут - следовательно в канале шум delay (1); DataPinB=PINB & MaskB; DataPinD=PIND & MaskD; AndDataPinB=AndDataPinB & DataPinB; OrDataPinB=OrDataPinB | DataPinB; AndDataPinD=AndDataPinD & DataPinD; OrDataPinD=OrDataPinD | DataPinD; } // Serial.println(k); } Message="Security system:Test results:"; if ((AndDataPinD!=0) || (AndDataPinB!=0)) { Message+="short circuited:"; if (AndDataPinD & B10000) Message+="1,"; if (AndDataPinD & B100000) Message+="2,"; if (AndDataPinD & B1000000) Message+="3,"; if (AndDataPinD & B10000000) Message+="4,"; if (AndDataPinB & B100) Message+="5,"; if (AndDataPinB & B1000) Message+="6,"; if (AndDataPinB & B10000) Message+="7,"; if (AndDataPinB & B100000) Message+="8,"; } if ((OrDataPinD!=0) || (OrDataPinB!=0)) { Message+="Not connected:"; if (OrDataPinD & B10000) Message+="1,"; if (OrDataPinD & B100000) Message+="2,"; if (OrDataPinD & B1000000) Message+="3,"; if (OrDataPinD & B10000000) Message+="4,"; if (OrDataPinB & B100) Message+="5,"; if (OrDataPinB & B1000) Message+="6,"; if (OrDataPinB & B10000) Message+="7,"; if (OrDataPinB & B100000) Message+="8,"; } MaskB=MaskB&(~AndDataPinB)&(~OrDataPinB); MaskD=MaskD&(~AndDataPinD)&(~OrDataPinD); Message+="Working:"; if (MaskD & B10000) Message+="1,"; if (MaskD & B100000) Message+="2,"; if (MaskD & B1000000) Message+="3,"; if (MaskD & B10000000) Message+="4,"; if (MaskB & B100) Message+="5,"; if (MaskB & B1000) Message+="6,"; if (MaskB & B10000) Message+="7,"; if (MaskB & B100000) Message+="8,"; }
Код не очень, будет время - поправлю. Но учитывая что хоть что то кроме e-mail я писал 10 лет назад -нормально.
Браво ! Прекрасный стиль, особенно хороши комменты в скетче.
Отлично!
Еще бы распиновку узнать, и как удалось заставить этот шилд работать с библиотекой GSM. У меня он работает только с SoftwareSerial.
Хорошо!
но использование радио канала сводит на нет все плюсы :)
любой радио канал можно просто заглушить и делай что хочеш.
И откуда злоумышленник обычно узнает, что объект имеет сигнализацию завязаную на GSM?
И откуда злоумышленник обычно узнает, что объект имеет сигнализацию завязаную на GSM?
ну наверное нужно очень много соображать на тему что телефонов никто не проводил, это очевидно по отсутсвию проводов.
а если есть сигнализация, то единственый вариант это сотовая связь. глушилки продаются вон на каждом углу.
Да путь себе глушат...
Что мешает топик-стартеру купить Интернет-пакет и каждую минуту (секунду) за недорого гнать информацию о том, что у него на объекте все хорошо/плохо?
Если злоумышленник поставит непреодолимые для GSM-сигнала помехи, принимающая информацию программа не получит никакой информации о статусе объекта - повод встревожиться...
Да путь себе глушат...
Что мешает топик-стартеру купить Интернет-пакет и каждую минуту (секунду) за недорого гнать информацию о том, что у него на объекте все хорошо/плохо?
Если злоумышленник поставит непреодолимые для GSM-сигнала помехи, принимающая информацию программа не получит никакой информации о статусе объекта - повод встревожиться...
это вариант, но тут возникает много ложных срабатываний... то сеть перегружена, то трафик застрял где то.. да мало ли что происходит с оператором сотовой сети.. :) каждый раз не набегаешся, да и в целом, какого целесообразность такой сигнализации? ну получил сигнал о проникновении, за час пока доедеш там и крышу разберут и унесут..
за час пока доедеш там и крышу разберут и унесут..
С таким подходом только автоматическеи "Турели" по периметру ставить)))
С таким подходом только автоматическеи "Турели" по периметру ставить)))
только так!
сугубо мое мнение, глубоко личное и никому не навязываемое.. дом(квартира) должен быть адын, в котором ты и живеш, а все остальное это никому не нужные панты. из серии "- у меня есть дача на берегу океяна, я на ней бываю 2 недели в году" а остальное время я сижу и жду когда сигнализация сработает и страшно переживаю.. гы гы
Кроме себя любимого, по близости обычно обитают другие домочадцы, которые могут иметь отличное от озвученного мнение. Некоторым из них дача может оказаться не менее важна, чем "дом в котором ты живешь".
16 совершенно бессмысленных, не относящихся к теме сообщений за полдня. охренеть...
может всё-же поговорим про библиотеки ардуино, пины и всё такое. а ваши терки лучше бы в соответствующие профильные форумы...
GSM shield такой
для его работы надо соединить 0,1 или 2,3 (в зависимости от установленной перемычки) и пины 7,8 ( 8 включение , 7 - сброс).
Но я отказался от стандартной библиотеки. В ней я не нашел удаления СМС с карты памяти и она не могла корректно включить шилд програмно. И работал шилд как то ... Не четко. То вышлет статус, то нет. А что там внитри происходит - не понятно.
020
pinMode(8, OUTPUT);
//включение sim900
021
digitalWrite(8,LOW);
// в разных GSM шилдах может быть разными порты для включения.
022
delay(1000);
023
digitalWrite(8,HIGH);
024
delay(2000);
025
digitalWrite(8,LOW);
такое включение мало того что выглядит коряво, так еще при сбросе arduino руками или watchdog не включает , а выключает шилд.
Свой скетч переписал под другую библиотеку:
код за это время сильно изменился. Датчики переехали на аналоговые входы (можно выключать сразу не подключенные каналы)
Сейчас добавилось:
постановка и снятие ключем с информированием СМС.
Сирена и индикация работы
Контроль температуры и влажности в помещении где стоит блок сигнализации, и температуры во всех комнатах где стоят датчики движения.
Датчики все таки рекомендую использовать профессиональные. Я поменял на такой.
Плюсы:
дальность и точность работы НАМНОГО выше.
ложные срабатывания пропали.(первый вариант согласно инструкции очень чувствителен к сквозняку)
И внутри есть стабилизатор на 5 вольт, откуда я запитал температурные датчики ds18b20
Спасибо за разработку! Хочу что-то подобное сделать. Есть вопросы:
1. Как ведет себя шилд при потере сети или слабом сигнале? Не нужны ли в цикле дополнительные проверки и переинициализации?
2. В коде нет вотчдогов. Были ли случаи зависания GSM шилда? Как его правильно инициализировать после зависания?
3. Есть ли возможность отлаживать sms без физической посылки\приема? (денег жалко)
как ведет себя шилд при слабом сигнале не знаю. Хоть в месте где стоит сигнализация и показывает иногда ноль палок, все проблемы решились заменой библиотеки. По индикации на шилде сеть всегда держит. Мне не приходиться сейчас ни перегружать arduino или сам шилд, ни ресетить шилд.
Если столкнусь - напишу, надо будет только проверить в начале цикла статус и заново запустить шилд.
Вотчдог не поможет, так как на регистрацию уходит иногда много времени , и контролер может перегрузиться даже при штатной работе.
Ресет шилда можно сделать програмно через 7 ногу или выключить и включить его через 8 (займет много времени для регистрации в GSM сети).
Отлаживать нужно без СМС, хоть у меня и бесплатные СМС, но напрягает ждать регитрации модуля и прихода СМС. Поэтому советую сначала все функции отладить на serial а потом только включать СМС. В библиотеки есть директива для дебага, при заявленной, модуль не отправляет сообщения(как я понял из исходников).
ВНИМАНИЕ: возможен сбой не модуля, но оператора !!! Признаки такие: на все команды модулб не отвечает, о изменении статуса тоже ничего не говорит. Через, примерно, 10 минут приходят все потерянные сообщения пачкой. Я пока не догадался потратил много времени. Причем система есть , если модуль часто и много высылает сообщений - вероятнее всего будет затык.
уважаемый просто восхищаюсь вашей работой!все супер.я только начинаю с ардуиной работать.у меня gsm шилд в связке с ардуино мега.и к вам вопрос,как ваш вышеизложенный код заставить работать через аппаратный порт меги,не програмный? какие и где внести изменения, если можно на примере измененного кода, чтобы я смог понять.буду очень благодарен!замечательная работа!
ноги , на которых работает GSM билиотека в ней и указываються. посмотрите файлы библиотеки, там указано. Но на аппаратных ногах вы не сможете отлаживать ?
moshael, как с вами можно связаться ???
Подойдет ли такая плата ? http://amperka.ru/product/arduino-gprs-shield
Подойдет ли такая плата ? http://amperka.ru/product/arduino-gprs-shield
Вполне, это продукт Seeeduino на SIM900, документация на него есть довольно подробная http://www.seeedstudio.com/wiki/GPRS_Shield_V2.0
ПОдскажите, как правильно сделать опрос нескольких датчиков ??? Датчики должны быть подключены на каждый отдельный пин, либо все последовательно ???
???
смотря от того сколько датчиков. В принципе можно и несколько датчиков повесить на один аналоговый порт, так же как и в обычных сигнализация. Анализируя уровень можно будет определить какие датчики в данный момент сработали.
Можно на один цифровой несколько, но тогда вы не будете знать какой датчик сработал из гирлянды.
Ну а если датчиков не много - можно на каждый порт по одному.
интересно, пробовал скомпилировать скетч (обе), но ошибки появились не компилируется...пробовал разобраться, но я только начал разобраться в arduino, и ничего не Получается.
а есть библиотеки под новый SIM800 гсм модуль? или обычные библиотеки будут с ним работать?
а есть библиотеки под новый SIM800 гсм модуль? или обычные библиотеки будут с ним работать?
Ссылку можно на shield?
http://ru.aliexpress.com/store/product/Smallest-SIM800L-GPRS-GSM-Module-MicroSIM-Card-Core-BOard-Quad-band-TTL-Serial-Port/110055_32284560394.html
https://github.com/stanleyhuangyc/Freematics/tree/master/libraries/SIM800
http://arduinodev.com/arduino-library-for-gprshttp-communication-with-sim800/
https://github.com/Seeed-Studio/Seeeduino_GPRS/blob/master/sim800.h
Интересный модуль. Блютус 3.0, фм радио, емайлы, джекблек.
только почему то рекумендуют использовать только если проблемы с местом. Может глючный еще?
http://ru.aliexpress.com/store/product/Smallest-SIM800L-GPRS-GSM-Module-MicroSIM-Card-Core-BOard-Quad-band-TTL-Serial-Port/110055_32284560394.html
https://github.com/stanleyhuangyc/Freematics/tree/master/libraries/SIM800
http://arduinodev.com/arduino-library-for-gprshttp-communication-with-sim800/
https://github.com/Seeed-Studio/Seeeduino_GPRS/blob/master/sim800.h
Производител пишет что отладочные средства одинаковы.
http://electronix.ru/forum/index.php?act=attach&type=post&id=88933
Соответственно вам нужно найти нужные библиотеки.
Я недавно купил sim900, скачал библииотеки с сайта где покупал и они не подошли.
Гуглил и нашел нужные.
Соответственно вам нужно найти нужные библиотеки.
а посмотреть что я по ссылкам выложил - лень?
Соответственно вам нужно найти нужные библиотеки.
а посмотреть что я по ссылкам выложил - лень?
Я как бы пытался вам на вопрос ответить. У меня с подключением пробем нет.
интересно, пробовал скомпилировать скетч (обе), но ошибки появились не компилируется...пробовал разобраться, но я только начал разобраться в arduino, и ничего не Получается.
Аналогичная ошибка. Как исправляется?
Вот поправленный исходник. В комментариях ссылки на необходимые библиотеки.
Компилируется. В железе не проверял.
Я вот такой думаю заказать http://ru.aliexpress.com/item/GSM-GPRS-900-1800-MHz-Short-Message-Servic...
Я вот такой думаю заказать http://ru.aliexpress.com/item/GSM-GPRS-900-1800-MHz-Short-Message-Servic...
Ко мне такой приехал уже. Тоже еще не проверял. Для указанного девайса есть примеры использования в сети. Его основное достоинство - дешевизна.
Я же всяко отлаживаться буду на "нормальном" GSM шилде + UNO - это просто удобнее.
del
а что куда подключать? схемка есть?
а что куда подключать? схемка есть?
В исходниках все есть. А схемка - только у топикстартера, да и то, думаю, что только в голове.
мне интересно повозится, но запустить не с сим800 или 900, а просто с модемом по тх рх сигналу и все... а хотя "ринг" там тоже есть.
схемку тоже нарисовал бы.
Кто-нибудь использовал модуль GPRS-900
https://world.taobao.com/item/521797384915.htm?spm=a312a.7700714.0.0.RlbFZx#detail
Привлекает цена.
обвязка выглядит слабовато, врядли так будет стабильно работать...
Пример нормальной обвязки для популярного SIM900 можете посмотреть здесь - https://www.tindie.com/products/biolinq/tiny-sized-gsm-module-for-iot/
Кто-нибудь использовал модуль GPRS-900
https://world.taobao.com/item/521797384915.htm?spm=a312a.7700714.0.0.RlbFZx#detail
Привлекает цена.
нормально работает, только кондер после диода на 1000мкф надо ставить :)
сим900 уже неактуально так же как и сим300 когдато. - снимают с производтства.
смотрите сим800с - на сегодня самый дешевый.
Кто-нибудь использовал модуль GPRS-900
https://world.taobao.com/item/521797384915.htm?spm=a312a.7700714.0.0.RlbFZx#detail
Привлекает цена.
это дорого, такие модули на али стоят по полтора!! бакса. китаец спецом написал гпрс900 - чтобы подороже вам втюхать.
это 590й модуль, к симкому вроде не имеет отношения, но китайцы могут написать что угодно, лиж бы продать.
пока еще доступен для заказа, потом на SIM800 можно мигрировать, он полностью попиново совместим и обвязка нужна таже самая
сим 800С стоит от 5 или 6 баксов.
с сим800L не сравнить, во втором не выводят много ног, в том числе "бут". он типа подали питание и сам включился, не думаю, что это хорошо.
gsm сигнализация на ардуино должна быть вот такой:
Класс! Сперва хотел взять готовое решение... теперь очень задумался а не сделать ли самому :)
Сколько по деньгам всё вышло?
недешево... но всеравно там лучше чем гсм шилд готовый.
Хотя бы примерно... есть смысл вкладываться или проще готовое уже взять?
Если дешевле чем те варианты которые предлагаются в сети - то думаю стоит...