Весна, как известно, сопровождается всевозможными обострениями и вот главное «обострение» повылазило из своих нор на улицу, дабы присвоить себе то, что ему не принадлежит. А значит тема защиты своего имущества становится, как никогда, актуальной.
На сайте уже есть несколько обзоров на самодельные - . Они конечно функциональны, однако у всех имеется общая особенность - зависимость от розетки. Если с недвижимостью, где уже подведено электричество, это не проблема, то как быть с имуществом, где розетка далеко или окрестности вовсе обесточены? Я решил пойти другим путём - собрать долгоживущий, максимально простой и независимый от сетевого питания девайс, который будет всё время отсыпаться, а при проникновении грабителей, запускаться и отзваниваться хозяину на телефон, сигнализируя простым звонком о тревоге.

Предметы обзора

Покупные:
1. Макетная плата односторонняя 5x7 см: гетинакс - или стеклотекстолит
*- стеклотекстолит намного качественнее гетинакса.
2. Модуль Neoway M590 - , с антенной на текстолите -
3. Arduino Pro Mini «RobotDyn» ATmega168PA 8MHz 3.3V -
4. Плата контроля заряда-разряда лития -

Добытые на развалах цивилизации:
1. Стойки для платы, выпиленные из корпусов приборов - 6шт.
2. Аккумулятор литиевый плоский 1300mAh
3. Скобы, используемые для фиксации кабеля к стене
4. Ластик канцелярский
5. Медная проволока толщиной 1.5мм
6. Приборный корпус с местного радиорынка - 1.5$
7. Пара светодиодов разного цвета (взял с VHS-плеера)
8. Антенна и кнопка с колпачком (взял с Wi-Fi роутера)
9. 4-х контактный клеммник (взял со с диммера)
10. Разъём питания (взял со старого зарядника для 18650)
11. Разъём 6-пиновый (взял с DVD-привода)
12. Жестяная банка (из-под кофе например)

Arduino Pro Mini «RobotDyn» Atmega 168PA 3.3V 8MHz

Технические характеристики:
Микроконтроллер: ATmega168PA
Рабочее напряжение прямое: .8 - 5.5 В
Рабочее напряжение через стабилизатор LE33: 3.3 В или 5 В (в зависимости от модели)
Рабочая температура: -40°C… 105°C
Входное напряжение: 3.35-12 В (модель 3.3 В) или 5-12 В (модель 5 В)
Цифровые Входы/Выходы: 14 (6 из которых могут использоваться как выходы ШИМ: 3, 5, 6, 9, 10, и 11)
Аналоговые входы: 6
Таймеры-счётчики: два 8-битных и один 16-битный
Режимы энергосбережения: 6
Постоянный ток через вход/выход: 40 мА
Флеш-память: 16 Кб (2 используются для загрузчика)
ОЗУ: 1 Кб
EEPROM: 512 байт
Ресурс записи/стирания памяти: 10,000 Flash/100,000 EEPROM
Тактовая частота: 8 МГц (модель 3.3 В) или 16 МГц (модель 5 В)
SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK)
I2C: A4 (SDA) и A5 (SCL)
UART TTL: 0 (RX) и 1 (TX)
Даташит:

Выбор пал на данную атмегу совершенно случайно. на одном форуме, где обсуждались энергоэкономичные проекты, в комментариях попался совет использовать именно 168-ю атмегу.
Однако пришлось повозится, чтобы такую плату отыскать, поскольку сплошь и рядом все лоты были завалены 328-ми атмегами на частоте 16МГц, работающими от 5В. Для моего проекта такие характеристики были избыточны и неудобны уже изначально, поиски усложнились.
В итоге набрёл на 3.3-вольтовую версию Pro Mini на Atmega 168PA на eBay, причём не простую китайскую, а под брендом RobotDyn от российского разработчика. Да, у меня тоже сначала, как и у вас, возникло зерно сомнения. А зря. Когда проект уже был собран, а AliExpress ввёл обязательную платную доставку для дешёвых товаров (после которой посылки стали теряться гораздо чаще), тo позже заказал обычную Pro Mini Atmega168 (без PA) 3.3V 8MHz. Я немного экспериментировал с режимами энергосбережения c обеими платами, прошивая в каждую специальный скетч, погружающий микроконтроллер в максимальный режим энергосбережения и вот что вышло:
1) Arduino Pro Mini «RobotDyn»: ~250мкА
2) Arduino Pro Mini «NoName»: при подаче питания на стабилизатор напряжения (вывод RAW) и выпаянном светодиоде потребляемый ток составил ~3.92мА




- как вы поняли, разница в энергопотреблении почти в 16 раз, всё потому, что в NoName"мовской Pro Mini используется связка Atmega168+ , из которых сам МК ест всего 20мкА тока (это я проверил отдельно), всё остальное обжорство приходится на линейный преобразователь напряжения AMS1117 - даташит это только подтверждает:


В случае с платой от RobotDyn связка уже несколько иная - это Atmega168PA+ - здесь применён уже другой LDO-стабилизатор, чьи характеристики в плане энергосбережения оказались более приятными:


Выпаивать я его не стал, поэтому не могу сказать, сколько Atmega168PA потребляет тока в чистом виде. В данном случае мне хватило ~250мкА при питании от нокиевского литиевого аккумулятора. Однако если выпаять AMS1117 c NoName"мовской платы, то ATmega168-я обычная, в чистом виде, как я и сказал выше, потребляет 20мкА .
Светодиоды, стоящие по питанию можно сковырнуть чем-то острым. Это не проблема. Стабилизатор выпаивал феном. Однако не у каждого есть фен и навыки работы с ним, поэтому оба вышеприведённых варианта имеют право на существование.

Модуль Neoway M590E

Технические характеристики:
Частоты: EGSM900/DCS1800 Dual-band, or GSM850/1900 or Quad-band
Чувствительность: -107dBm
Максимальная мощность передачи: EGSM900 Class4(2W), DCS1800 Class1(1W)
Пиковый ток:
Рабочий ток: 210мА
Ток в спящем режиме: 2.5мА
Рабочая температура: -40°C… +85°C
Рабочее напряжение: 3.3V… 4.5V (рекомендуемое 3.9V)
Протоколы: GSM/GPRS Phase2/2+, TCP/IP, FTP, UDP etc.
Интернет: GPRS CLASS 10
Даташит:

Самый дешёвый GSM-модуль, что можно найти на рынке, как правило б/у, выпаянный не всегда ловкими китайскими руками с оборудования. Почему не всегда ловкими? Да всё из-за выпайки феном - нередко людям эти модули приходят с закороченным плюсом и минусом, что является одной из причин их неработоспособности. Поэтому первым делом необходимо прозванивать контакты питания на короткое замыкание.

Примечание. Отдельный немаловажный, на мой взгляд, момент хотелось бы отметить - эти модули могут приходить с круглым коаксиальным разъёмом под антенну, что позволяет отдельно заказать антеннку посерьёзнее и без плясок с бубном её к модулю подключить. А могут приходить и без этого разъёма. Это если говорить о самых дешёвых наборах. Если не хочется уповать на счастливую случайность, то есть наборы чуть подороже, где этот разъём присутствует + в комплекте идёт внешняя антенна на текстолитовой плате.

Этот модуль к тому же ещё и капризен до питания, поскольку в пике он потребляет до 2А тока, а диод, идущий в комплекте, вроде как задуман для понижения напряжения с 5В (почему и написано на самой плате 5В) до 4.2В, но судя по жалобам народа, он создаёт больше хлопот, чем пользы.
Допустим этот модуль у вас уже собран, а вместо диода впаяна перемычка, поскольку мы не собираемся подавать на него напряжение 5В, а будем питать его напрямую от литиевого аккумулятора, что укладывается в пределы допустимых напряжений 3.3-4.2В.
Надо будет его как-то ещё подключить к компьютеру, и проверить на работоспособность. Для этого случая лучше заранее прикупить себе - посредством него мы будем общаться с модулем и платами Arduino по последовательному интерфейсу UART (USART).
Подключение показано ниже на картинке (нарисовал, как умею):
TX модема >>> RX конвертера
RX модема <<< TX конвертера
Плюс аккумулятора - Плюс модема
Минус литиевого аккумулятора объединён с GND модема и GND конвертера
Для запуска модема вывод BOOT через резистор 4.7 кОм подать на GND


Тем временем, на компьютере запустить программу . Обратить внимание на настройки:
1) Выбрать COM-порт, к которому подключен TTL-конвертер, в моём случае это COM4, у вас может быть другой.
2) Выбрать скорость обмена данными. (Тут есть нюанс, ибо сами модули могут быть настроены под разные скорости, чаще всего 9600 бод или 115200 бод. Здесь нужно подбирать опытным путём, выбрав какую-то скорость, соединившись, и отправив команду АТ, если в ответ приходят крякозябры, то отключится, выбрать другую скорость и повторить команду. И так, пока не придёт в ответ ОК).
3) Выбрать длину пакета (в данном случае 8 бит), бит чётности отключен (none), стоп-бит (1).
4) Обязательно поставить галку +CR , и тогда к каждой посылаемой нами на модуль команде в конце будет автоматически добавляться символ переноса каретки - модуль понимает команды только с этим символом в конце.
5) Соединение, тут всё понятно, нажали и можем работать с модулем.

Если нажать на «Соединение» и после этого запустить модуль, подав BOOT через резистор 4.7К на землю, то сперва в терминале высветится надпись «MODEM:STARTUP», затем, через некоторое время надпись"+PBREADY", означающая, что была прочтена телефонная книга, несмотря на то, что она может быть пустой:

Под этим спойлером АТ-команды с примерами

Печатаем команду AT - в ответ модуль нам присылает нашу команду, поскольку включен режим эха, и OK:

Проверим статус модема командой AT+CPAS - в ответ опять наша команда, +CPAS: 0 и ОК.
0 - означает, что модуль готов к работе, но в зависимости от ситуации могут быть и другие цифры, например 3 – входящий звонок, 4 – в режиме соединения, 5 – спящий режим. По 1 и 2 информации не нашёл.

Изменение скорости передачи данных по UART происходит командой AT+IPR=9600 - это если нужна скорость 9600. Если какая-то другая, аналогично AT+IPR=19200 к примеру или AT+IPR=115200.

Проверим сигнал сети. AT+CSQ, в ответ приходит +CSQ: 22,1 - значение до запятой имеет диапазон 0… 31 (115… 52дБл) - это уровень сигнала, чем больше, тем лучше. Но 99 означает его отсутствие. Значение после запятой - качество сигнала 0… 7 - здесь уже наоборот, чем число меньше, тем лучше.

Отключим режим эха, отправив команду ATE0, чтобы дублирующие команды не мешались. Обратно этот режим включается командой ATE1.

Посмотреть версию прошивки AT+GETVERS



Эти и многие другие команды можно посмотреть

Совмещение плат

Если Pro Mini припаять к макетной плате труда не составляет, то с GSM-модулем дело обстоит несколько сложнее, т.к. контактная гребёнка у него расположена только лишь с одной стороны и если припаять только её, то другая сторона платы останется просто висеть в воздухе. Тогда, опять же на глаз пришлось сверлить дополнительные 3 отверстия возле трёх углов на плате. Затем области вокруг каждого из отверстий были зачищены от маски. Для удобства, на беспаечную макетную плату (белую) поместил разъединённые выводы от гребёнки и, установив на них плату GSM-модуля нормально запаял:

Позже пришлось делать ещё одно отверстие, в моём случае на букве «I», где написано «Мade In China», с краю платы.


Получилось так, что добавленный контакт, который по сути является GND, стал находится рядом c GND платы Pro Mini, и тем самым появилась возможность объединить землю GSM-модуля и Pro Mini каплей припоя (длинный вывод посередине и справа от него вывод Pro Mini) - стрелочками их отметил. Кривовато конечно вышло, зато надёжно теперь держится:



Между платами осталось некоторое пространство - в него я поместил плату контроля заряда разряда лития с предварительно выпаянным microUSB-разъёмом и припаянными проводами.

Платка входит туда очень плотно, при этом свечение светодиодов сбоку будет хорошо заметно через небольшое отверстие в корпусе.



Стойки для платы

Чтобы надёжно закрепить плату внутри корпуса, пришлось потратить пару дней на раздумия, как это можно реализовать. Вариант с термоклеем не рассматривался по нескольким причинам - он может отвалиться, деформироваться и самое главное - конструкция получилась бы трудно разбираемой.
Пришёл к мысли, что самым простым и правильным вариантом здесь будет применить стойки, которых естественно у меня не было. Однако было пару нерабочих зарядников, откуда было выпилено по одной длинной стойке с резьбой под саморезы. Каждая стойка была распилена пополам допилена напильником до примерно 9.5мм - именно при такой высоте расположенный под платой аккумулятор имеет достаточный запас, примерно в 2мм - это сделано для того, чтобы паянные контакты платы своими остриями не касались него и чтобы была возможность вложить между ними кусочек поролона для фиксации.
Что касается прикрепления платы непосредственно к корпусу, то здесь нарезал четыре полоски из банки из-под кофе, на концах которых просверлил по отверстию, затем закрепил их на тех же саморезах, которые вкручены в стойки. Ниже на фото посмотрите, как это выглядит.
Следующий этап - прикрутить пару стоек с другой стороны платы, то есть сверху, чтобы при закрытом корпусе, крышка слегка упиралась в эти стойки, создавая дополнительную фиксацию. Чуть позже, под это дело мне в руки попался корпус из-под советского пропагандистского радио (если бы он нашёлся раньше - все стойки взял бы отсюда), где нашёл парочку более-менее подходящих по высоте, но сперва я их по центру рассверлил дрелью под саморезы. Потом спилил их и также допилил напильником, убрав излишки. Тут у меня вышла одна тонкость - на фото можно заметить, что одна белая стойка прикручена к гетинаксовой плате с краю, а другая белая - непосредственно к плате модуля, т.к. с одного края плата модема полностью закрывает собой плату нижнюю, а с противоположного края - наоборот - выглядывает уже нижняя. При этом в обеих платах пришлось дополнительно рассверливать отверстия, чтобы шляпки саморезов могли свободно пройти.
Ну и наконец, осталось сделать так, чтобы плата всегда была параллельна корпусу - под это дело замечательно подошли скобы, которые применяют для фиксации проводов и кабелей на стене, гвозди из них я предварительно извлёк. Скобы хорошо цепляются к плате вогнутой стороной без каких-либо дополнительных приспособлений, единственное - справа от SIM-карты, ширина скобы оказалась избыточной и пришлось её также отшлифовать.
Все детали подгонялись на глаз и опытным путём, ниже фото всего вышесказанного:



Разъёмы. Светодиоды. Кнопка.

Так как гребёнка у меня закончилась, пришлось с платы DVD-привода демонтировать 6-пиновый разъём, который припаял затем к Pro Mini, это для удобства перепрошивки платы. Рядом же припаял круглый разъём (нокиевский 3.5мм) для заряда лития.

Корпус 6-пинового разъёма немного допилил напильником, ибо его края немного выступали над корпусом. Гнездо зарядки идеально плотно упёрлось в стенку корпуса.

С другой стороны платы припаял кнопку для перезагрузки устройства и два светодиода для отладки прошивки - красный светодиод подключен к GSM-модулю, второй зелёный светодиод к 10-му выводу Pro Mini - по нему мне проще отлаживать программу.

Доработка аккумулятора

Плоский нокиевский аккумулятор от телефонов Nokia не менее распространённый элемент, чем 18650, однако многие попросту отказываются от его использования из-за неудобства подключения контактов, которые на самом аккумуляторе утоплены вглубь. Паять их нежелательно, поэтому решено было воспользоваться способом, предложенным этими , а именно сделать из канцелярского ластика и медной проволоки (толщиной 1.5мм) контактную колодку самому.
Сперва проткнул кусочек ластика двумя проволоками с предварительно зачищенными концами, и прикинул к контактам аккумулятора, чтобы расстояние между ними совпадало,
кончики загнул, залудил паяльником, а за длинные концы чуть вытащил назад, чтобы полученные контакты оказались утоплены в ластик.



Примерка на аккумуляторе:

Закрепить контактную колодку можно канцелярской резинкой или замотать синей изолентой, что я и сделал в итоге.

Сборка.

Основная часть работы сделана, осталось всё это собрать и зафиксировать.
Между аккумулятором и платой вложил кусочек поролона, чтобы тот не елозил потом внутри корпуса. На питание модуля я дополнительно припаял конденсатор на 2200 мкФ.

При подключенной зарядке:

Корпус. Внешний клеммник.

Корпус заимел на местном радиорынке примерно за 1.5$, если перевести в доллары, размером 95x60x25мм, практически с пачку сигарет. В нём я просверлил несколько отверстий. Сперва для 4-х контактного клеммника, взятого от неработающего диммера.
Два крайних контакта я полностью освободил от болтов с прокладками, просверлил отверстия под более длинные болты, на которых весь клеммник и будет держаться на корпусе. На самом же корпусе, понятно дело, два крайних отверстия будут большими, а два посередине поменьше - в них будут продеты контакты, один из которых подключен к VCC Pro Mini, а второй контакт к пину 2.

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

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

Плата в корпусе с подключенным шлейфом USB-TTL конвертера:

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

Ну и совсем в сборе с подключенной зарядкой выглядит так:

Тест. Как это работает:

Помимо тестов с антенками я проверял, как будет себя вести сигнализация на улице, в мороз -15. Для этого я просто поместил внутренности целиком в контейнер и оставлял на балконе на ночь, сигнализация при этом не стартовала, причина оказалась в общем-то очевидна - литий не любит мороз. Это подтвердилось другим тестом, где аккумулятор я оставлял дома, а плату через длинные провода выводил на улицу и оставлял так на сутки в тот же мороз - срабатывание, как ни в чём не бывало. С другой стороны было бы странно, если бы сигнализация не заработала т.к. в даташитах что на атмегу, что на модуль, что на кварц - допустимые температуры работы до -40 градусов.

Принцип работы организован по внешнему прерыванию, изначально пин 2 замкнут на VCC и тем самым на выводе поддерживается логический 1, а контроллер спит. Как только контакт нарушается и на пине 2 появляется 0, микроконтроллер просыпается, опускает 3-й пин (к которому через резистор подключен BOOT модема) к земле - запускается модуль, МК периодически опрашивает модуль на готовность, и как только он поймает сеть, сразу посылает вызов на указанный в коде номер телефона хозяина. После отклонения вызова, девайс отключается, не посылая больше бесконечных вызовов, чем грешат многие китайские сигнализации.

Дополнительная информация

#include #include // библиотека программного UART SoftwareSerial gsm(7, 6); // RX(7), TX(6) void wakeUp(){} // пустой обработчик прерывания /////////////////////////////////////////// void gsmOFF(){ // PORTD|=(1<<3); // ВЫКЛЮЧЕНИЕ МОДУЛЯ _delay_ms(10); // gsm.println("AT+CPWROFF"); // ПЕЧАТАЕМ КОМАНДУ OFF PORTB &=~ (1<<2); // выключить LED 10 } // //========================================= void gsmON(){ // PORTD|=(1<<6); // 6-му порту (TX) назначить 1 PORTD &= ~(1<<3); // ЗАПУСК МОДУЛЯ _delay_ms(10); // while(!gsm.find("+PBREADY")); // ждём прочтения тел. книги PORTB |= (1<<2); // включить LED 10 _delay_ms(100); // while(1){ // gsm.println("AT+CREG?"); // проверяем в сети ли модуль if (gsm.find("0,1")) break; // если сеть есть, выходим из цикла _delay_ms(400); // проверка раз в 0,4 сек } // } // /////////////////////////////////////////// // void sleepNow(){ // функция засыпания ADCSRA = 0x00; // отключить подсистему АЦП (экономия 140 мкА) PORTD&=~(1<<6); // в вывод TX поставить 0 _delay_ms(100); // set_sleep_mode(SLEEP_MODE_PWR_DOWN); // режим сна PWR_DOWN sleep_enable(); // включение сна attachInterrupt(0, wakeUp, LOW); // включить прерывания sleep_mode(); // sleep_disable(); // detachInterrupt(0); // отключить прерывания } void setup(){ gsm.begin(9600); // скорость работы UART DDRD = B01001000; // 3-й и 6-й выводы на выход DDRB |= (1<<2); // вывод 10 на выход gsmON(); // запуск модуля для теста gsmOFF(); // выключаем модуль } void loop(){ if (!(PIND&(1<<2))){ // если на 0-ом прерывании появился 0 gsmON(); gsm.println("ATD+79xxxxxxxxx;"); // отзваниваемся, в ответ приходит OK и CONNECT _delay_ms(100); if (gsm.find("OK")) while(1){ // ожидание сброса вызова gsm.println("AT+CPAS"); // при каждой итерации опрашиваем модуль if (gsm.find("0")) break; // если 0, то выходим из цикла while _delay_ms(100); // проверка раз в 0,1 сек } for (char i=0; i<14; i++){ PORTB|=(1<<2); // LED 10 ON _delay_ms(200); PORTB&=~(1<<2); // LED 10 OFF _delay_ms(200); } gsmOFF(); // выключить модуль _delay_ms(10); while(1); // блокируем программу } else { sleepNow(); // укладываем контроллер спать } }

Схема (без платы контроля заряда-разряда)



Выводы и мысли. Планы.

Сигнализация используется на даче, работой удовлетворён, однако с дальнейшим изучением AVR, приходит всё больше идей для дальнейшей ей модификации. Ардуино с его лже-языком Wiring меня сильно расстроила, т.к. обнаружился один неприятный момент в работе. Когда я использовал функции для работы с портами digitalWrite(); или pinMode(); - то GSM-модуль почему-то очень часто зависал. Но стоило заменить их на выкрутасы вроде DDRB|=(1<Только лишь операция прямого обращения к портам заставила заработать девайс, как и было задумано.

По энергосбережению...
Собранный девайс отработал четыре полных месяца без подзарядки и продолжает работать, хотя правильнее сказать «спать». Проверяется это простой перезагрузкой через белую кнопку. При энергопотреблении 250 мкА (через стабилизатор LE33) и аккумуляторе ~1430 mAh, хотя ладно, ввиду неновизны аккумулятора округлим до 1000mAh, получается, что девайс может отсыпаться около 5.5 месяцев без подзарядки. Если всё-таки выпаять стабилизатор, то время работы можно смело умножить в 10 раз. Но в моём случае в этом нет нужды, т.к всё равно нужно раз в три месяца тратить баланс с симки, заодно и девайс можно проверить и подзарядить.
Приведённый в обзоре пример энергосбережения - далеко не предел, т.к. судя по информации из даташита, можно понизить тактовую частоту микроконтроллера (а делается это установкой фьюзов) до 1МГц и, если подать 1.8В напряжения, то потребление опустится ниже планки 1мкА в активном режиме. Весьма недурно! Но если МК при этом будет тактироваться от внутреннего RC-генератора, то появится другая проблема - эфир UART окажется засорен мусором и ошибками, особенно если контроллер нагреть или охладить.

По доработке...
1) Обычная проволока, установленная на разрыв не совсем удобна, планирую поэкспериментировать с датчиком Холла и герконом, хотя про последний говорят, что не шибко надёжен, ибо контакты внутри него могут залипнуть.
2) Неплохо было бы добавить возможность смены «номера хозяина» без участия компьютера и перепрошивки. Это уже с EEPROM придётся поработать.
3) Попробовать прерывания от сторожевого таймера, но не просто любопытства ради, а чтобы микроконтроллер периодически просыпался сам, делал замеры напряжения аккумулятора и отправлял полученное значение по SMS, чтобы быть в курсе насколько аккумулятор разряжен.
4) Солнечная панель может и вовсе избавить от необходимости подзаряжать девайс, это будет актуально особенно для малоёмких аккумуляторов.
5) Ещё давно хотел прикупить LiFePo4 аккумуляторы, которые по отзывам нормально переносят мороз, да вот пока искал годный лот, весна уже незаметно наступила.
6) Поработать над эстетической составляющей

Какую Pro Mini купить?
Если фена нет, то Pro Mini «RobotDyn» Atmega168PA 3.3V, чем-то острым сковыриваете светодиод и имеете ~250мкА.
Если есть фен, то любую плату, выпаиваете стабилизатор и светодиод по питанию - получаете ~20мкА потребления тока.

На этом пока всё, надеюсь, обзор был интересен и полезен.

Планирую купить +174 Добавить в избранное Обзор понравился +143 +278

Её автор хотел выполнить самоделку, чтобы она была дешевой и беспроводной.
Эта самоделка использует PIR датчик движения, а передача информации происходит при помощи RF модуля.

Автор хотел воспользоваться инфракрасным модулем, но так как он имеет ограниченную дальность действия, и плюс может работать только на линии прямой видимости приемником, поэтому он выбрал RF модуль, при помощи которого можно добиться дальности приблизительно 100 метров.


Для того, чтобы посетителям было удобнее просматривать сборку сигнализации, я решил поделить статью на 5 этапов:
Этап 1: Создание передатчика.
Этап 2: Создание приемника.
Этап 3: Установка программного обеспечения.
Этап 4: Тестирование собранных модулей.
Этап 5: Сборка корпуса и установка в него модуля.

Все что понадобилось автору, это:
- 2 платы ARDUINO UNO/ARDUINO MINI/ARDUINO NANO для приёмника и передатчика;
- RF приёмопередающий модуль (433 MHZ);
- PIR датчик движения;
- 9В батарейки (2 штуки) и коннекторы к ним;
- Зуммер;
- Светодиод;
- Резистор с сопротивлением 220 Ом;
- Макетная плата;
- Джамперы/провода/перемычки;
- Монтажная плата;
- Межплатные штыревые соединители;
- Переключатели;
- Корпуса для приёмника и передатчика;
- Цветная бумага;
- Монтажный скотч;
- Наборной скальпель;
- Термоклеевой пистолет;
- Паяльник;
- Кусачки /инструмент для снятия изоляции;
- Ножницы по металлу.


Этап 1.
Начинаем создание передатчика.
Ниже предоставлена схема работы датчика движения.


Сам передатчик состоит из:
- Датчика движения;
- Платы Arduino;
- Модуль передатчика.


Сам датчик имеет три вывода:
- VCC;
- GND;
- OUT.

После чего, проверил работу датчика


Внимание!!!
Перед загрузкой прошивки, автор убеждается в том, что в настройках Arduino IDE верно установлена текущая плата и последовательный порт. После чего загрузил скетч:

Позже, как датчик движения зафиксирует движение перед собой, засветится светодиод, а также в мониторе вы сможете увидеть соответствующее сообщение.


По схеме чуть ниже.


Передатчик имеет 3 вывода (VCC, GND, и Data), соединяем их:
- VCC > 5В выводом на плате;
- GND > GND ;
- Data > 12 выводом на плате.

Этап 2.


Сам приёмник состоит из:
- Модуля RF приёмника;
- Платы Arduino
- Зуммера (динамика).

Схема Приемника:


Приемник, как и передатчик, имеет 3 вывода (VCC, GND, и Data), соединяем их:
- VCC > 5В выводом на плате;
- GND > GND ;
- Data > 12 выводом на плате.


Этап 3.
Основой всей прошивки автор выбрал файл-библиотеки. Скачал, который он , и поместил его в папку с библиотеками Arduino.

ПО для передатчика.
Перед тем, как загружать код прошивки в плату, автор выставил следующие параметры IDE:
- Board -> Arduino Nano (или та плата, которую вы используете);
- Serial Port ->


После установки параметров, автор скачал файл прошивки Wireless_tx и загрузил его на плату:

ПО для приемника
Автор повторяет те же действия и для принимающей платы:
- Board -> Arduino UNO (или та плата, которую вы используете);
- Serial Port -> COM XX (проверьте com порт, к которому подключено ваша плата).



После того как автор установил параметры, скачивает файл wireless_rx и загружает его в плату:


После, при помощи программы, которую можно скачать , автор сгенерировал звук для зуммера.

Этап 4.
Далее, после загрузки ПО автор решил проверить, все ли работает должным образом. Автор подсоединил источники питания, и провел рукой перед датчиком, и у него заработал зуммер, а значит все работает как надо.


Этап 5.
Финальная сборка передатчика
Сначала автор срезал выступающие выводы с приемника, передатчика, плат arduino, и т. д.


После чего, соединил плату arduino с датчиком движения и RF передатчиком при помощи джамперов.


Далее автор начал делать корпус для передатчика.

Сначала он вырезал: отверстие для выключателя, а также круглое отверстие для датчика движения,после чего приклеил его к корпусу.




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


После чего, автор начал вставлять электронную начинку внутрь корпуса, при помощи двухстороннего скотча.



Финальная сборка приемника
Автор решил соединить плату Arduino с монтажной платой резиновой лентой, а также установим RF приемник.


Далее автор вырезает на другом корпусе два отверстия, одно для зуммера, другое для выключателя.


И приклеивает.


После чего, автор устанавливает на все детали джамперы.




Потом автор вставляет готовую плату в корпус, и фиксирует ее двухсторонним клеем.

Инфракрасные (ИК, IR) датчики обычно используются для измерения расстояний, но их также можно использовать и для обнаружения объектов. Подключив несколько ИК-датчиков к Arduino, мы можете создать охранную сигнализацию.

Обзор

Инфракрасные (ИК, IR) датчики обычно используются для измерения расстояний, но их также можно использовать и для обнаружения объектов. ИК-датчики состоят из инфракрасного передатчика и инфракрасного приемника. Передатчик выдает импульсы инфракрасного излучения в то время, как приемник детектирует любые отражения. Если приемник обнаруживает отражение, это означает, что перед датчиком на некотором расстоянии есть какой-то объект. Если отражения нет, нет и объекта.

IR-датчик, который мы будем использовать в данном проекте, обнаруживает отражение в определенном диапазоне. Эти датчики имеют небольшое линейное устройство с зарядовой связью (CCD), которое детектирует угол, с которым ИК-излучение возвращается к датчику. Как показано на рисунке ниже, датчик передает инфракрасный импульс в пространство, а когда перед датчиком появляется объект, импульс отражается обратно к датчику под углом, пропорциональным расстоянию между объектом и датчиком. Приемник датчика детектирует и выводит угол, и, используя это значение, вы можете рассчитать расстояние.

Подключив пару ИК-датчиков к Arduino, мы можем сделать простую охранную сигнализацию. Мы установим датчики на дверной косяк, и, правильно выровняв датчики, мы сможем обнаружить, когда кто-то проходит через дверь. Когда это произойдет, сигнал на выходе ИК-датчика изменится, а мы обнаружим это изменение, постоянно считывая выходной сигнал датчиков с помощью Arduino. В данном примере мы знаем, что объект проходит через дверь, когда показание на выходе ИК-датчика превышает 400. Когда это произойдет, Arduino включит сигнал тревоги. Чтобы сбросить срабатывание сигнализации, пользователь может нажать на кнопку.

Комплектующие

  • 2 x ИК-датчик расстояния;
  • 1 x Arduino Mega 2560;
  • 1 x зуммер;
  • 1 x кнопка;
  • 1 x резистор 470 Ом;
  • 1 x NPN транзистор;
  • перемычки.

Схема соединений

Схема для данного проекта показана на рисунке ниже. Выходы двух ИК-датчиков подключены к выводам A0 и A1 . Два других вывода подключены к выводам 5V и GND. 12-вольтовый зуммер подключен к выводу 3 через транзистор, а кнопка, используемая для отключения сигнализации, подключена к выводу 4.


На приведенной ниже фотографии показано, как мы наклеили датчики на дверной косяк для этого эксперимента. Разумеется, в случае постоянного использования вы установили бы датчики по-другому.


Установка

  1. Подключите выводы 5V и GND платы Arduino к выводам питания и GND датчиков. Вы также можете подавать на них внешнее питание.
  2. Подключите выходные выводы датчиков к выводам A0 и A1 платы Arduino.
  3. Подключите вывод 3 Arduino к базе транзистора через резистор 1 кОм.
  4. Подайте напряжение 12 В на коллектор транзистора.
  5. Подключите положительный вывод 12-вольтового зуммера к эмиттеру, а отрицательный - к шине земли.
  6. Подключите вывод 4 к выводу 5V через кнопку. В целях безопасности, во избежание протекания большого тока это всегда лучше делать через дополнительный небольшой резистор.
  7. Подключите плату Arduino к компьютеру через USB кабель и загрузите программу в микроконтроллер, используя Arduino IDE.
  8. Подайте на плату Arduino питание, используя блок питания, аккумулятор или USB кабель/

Код

const int buzzer=3; // вывод 3 – это выход на зуммер const int pushbutton=4; // вывод 4 – это вход для кнопки void setup() { pinMode(buzzer,OUTPUT); // настроить вывод 3 на выход pinMode(pushbutton,INPUT); // настроить вывод 4 на вход } void loop() { // прочитать выходной сигнал обоих датчиков и сравнить результат с пороговым значением int sensor1_value = analogRead(A0); int sensor2_value = analogRead(A1); if (sensor1_value > 400 || sensor2_value > 400) { while(true) { digitalWrite(buzzer,HIGH); // включить сигнал тревоги if(digitalRead(pushbutton) == HIGH) break; } } else { digitalWrite(buzzer,LOW); // выключить сигнал тревоги } }

Видео

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

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

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

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

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

Список изменений

GSM_03_12_2016-14-38.hex - исправлена работа устройства с модемом M590.
GSM_05_12_2016-13-45.hex - добавлена консольная команда memtest, оптимизация использования оперативной памяти.
GSM_2016_12_06-15-43.hex - добавлен вывод результатов команд в консоль, оптимизация памяти. Занято: 49% SRAM.
GSM_2016_12_07-10-59.hex - теперь телефонные номера добавляются и удаляются правильно. Занято: 49% SRAM, 74% Flash Memory.
GSM_2016_12_07-15-38.hex - добавлена возможность подключения датчика движения , подключается к пину A0 (в данном случае пин A0 используется как цифровой). Добавлены смс - команды PIROn , PIROff . Занято: 48% SRAM, 76% Flash Memory.
GSM_2016_12_08-13-53.hex - Теперь после успешного выполнения команды, которая в ответ не отправляет смс сообщение, устройство однократно мигает синим светодиодом. Теперь после некорректного выполнения команды, которая в ответ не отправляет смс сообщение, устройство дважды мигает синим светодиодом. Теперь после инициализации параметров устройства, если включен «тихий» режим (SendSms = 0), устройство в течение 2 секунд часто мигает синим светодиодом. Исправлена ошибка из-за которой номер не всегда удалялся из памяти командой DeletePhone. Занято: 48% SRAM, 78% Flash Memory.
GSM_2016_12_11-09-12.hex - Добавлены консольные команды AddPhone и DeletePhone, синтаксис аналогичен смс-командам. Оптимизация памяти. Занято: 43% SRAM, 79% Flash Memory.
GSM_2017_01_03-22-51.hex - Реализована поддержка и ему подобных расширителей портов ввода/вывода на чипе PCF8574, для подключения дополнительных 8 датчиков, в том числе герконов. Автоматический поиск адреса и автоматическая настройка модуля. Стандартные названия датчиков и логический уровень их срабатывания изменяется с помощью команды EditSensor. Изменены содержания тревожных смс для основного датчика (пин D0) «Alarm! Main sensor!» и датчика движения (пин A0) «Alarm! PIR sensor!». Добавлены команды EditSensor и I2CScan. Занято: 66% SRAM, 92% Flash Memory.
GSM_2017_01_15-23-26.hex - Поддержка модема A6_Mini. Контроль наличия внешнего питания (пин D7). Добавлены смс команды WatchPowerOn, WatchPowerOff. Добавлены консольные команды ListConfig, ListSensor. Теперь смс команда EditSensor работает правильно. Незначительно «урезан» вывод отладочной информации в монитор порта. Занято: 66% SRAM, 95% Flash Memory.
GSM_2017_01_16-23-54.hex - Теперь в ответном сообщении на смс команду «Info» так же сообщается состояние датчика движения. Исправлена ошибка из-за которой иногда отправлялись пустые ответные смс сообщения. Теперь устройство оповещает не только об отключении, но и о возобновлении внешнего питания. Все модемы стали «меньше болтать», теперь в мониторе порта стало немного чище. Занято: 66% SRAM, 95% Flash Memory.
GSM_2017_02_04-20-23.hex - Исправлена ошибка «Watch the power on». Теперь после снятия с охраны, выключается «тревожный пин». Теперь после удаления номера в консоль выводится правильная информация. Возможно исправлена ошибка из-за которой иногда отправлялись пустые ответные смс сообщения. Занято: 66% SRAM, 90% Flash Memory.
GSM_2017_02_14-00-03.hex - Теперь по умолчанию отправляются смс сообщения, параметр SendSms снова равен 1. Теперь при замыкании контактов основного герконового датчика (закрытии двери) устройство мигает синим светодиодом в течение 2 секунд, сигнализируя о нормальной работе датчика. Занято: 66% SRAM, 90% Flash Memory.
GSM_2017_03_01-23-37.hex - Команда WatchPowerOn удалена. Добавлена консольная команда WatchPowerOff, идентична смс команде. Добавлены команды WatchPowerOn1, WatchPowerOn2. WatchPowerOn1 - мониторинг внешнего питания включен если сигнализация поставлена на охрану, WatchPowerOn2 - мониторинг внешнего питания включен всегда. Реализована функция постановки на охрану и снятия с охраны внешними устройствами, для этого используются выводы A1(D15) и A2(D16). Сигнализация ставит/снимает охрану при появлении на выводе A1(D15) высокого уровня +5В или на выводе A2(D16) низкого уровня GND. Вывод A1(D15) подтягивается к GND, вывод A2(D16) подтягивается к +5V через резисторы 20 (10) кОм. Добавлены команды GuardButtonOn и GuardButtonOff. Теперь после постановки на охрану мигает красный светодиод, пока не будет проверена целостность контура основного герконового датчика. Если контур целый загорается красный светодиод. Занято: 66% SRAM, 95% Flash Memory.
GSM_2017_03_12-20-04.hex - Теперь в консоли стало ещё чище, но если включен тестовый режим «TestOn», то в консоль выводится дополнительная информация. Исправлен баг «Sent!», теперь в консоль правильно выводится информация об отправке сообщений. Исправлен баг «повторного ложного вызова». Теперь запрос баланса должен работать корректно на всех модемах. Занято: 67% SRAM, 95% Flash Memory.
GSM_2017_04_16-12-00.hex - Исправлен . Теперь команды Info и Money всегда будут присылать ответное смс. Команда GuardButtonOn заменена командами GuardButtonOn1 и GuardButtonOn2. Занято: 67% SRAM, 99% Flash Memory.
GSM_2017_04_21-09-43.hex - не рекомендуется к использованию, только в качестве тестирования, спасибо за выявленные ошибки:) - Теперь параметр sendsms не влияет на отправку смс сообщений мониторинга электросети. Добавлена смс команда DelayBeforeGuard отвечающая за задержку при постановке на охрану, значение не может превышать 255 секунд. Добавлена смс команда DelayBeforeAlarm отвечающая за задержку отправки уведомлений и включение «тревожного пина» при срабатывании датчиков, значение не может превышать 255 секунд. Удалены команды ClearSMS, теперь сообщения удаляются автоматически после получения. Занято: 68% SRAM, 100% Flash Memory.
GSM_2017_04_22-20-42.hex - Исправлены множественные ошибки. Команды ClearSMS снова присутствуют в прошивке. Оптимизация памяти. Занято: 68% SRAM, 98% Flash Memory.
GSM_2017_04_23-17-50.hex - Теперь запрос баланса должен работать корректно на всех модемах. Постановка и снятие с охраны внешними устройствами теперь работает правильно. Ответные сообщения смс команды Info не должны быть пустыми. Оптимизация памяти. Занято: 68% SRAM, 98% Flash Memory.
GSM_2017_04_24-13-22.hex - Теперь передача консольных команд в GSM модуль производится только если включен тестовый режим. Теперь нет разделения на смс команды и консольные команды, все существующие команды можно передавать как через смс, так и через консоль. Возможно исправлен баг с командой Info. Оптимизация памяти. Занято: 68% SRAM, 94% Flash Memory.
GSM_2017_04_25-20-54.hex - Исправлен баг при котором команда ListConfig меняла значение последнего события. Теперь при вводе команд через косоль не отправляются ненужные смс сообщения. Возможно исправлен баг с командой Info. Оптимизация памяти. Занято: 66% SRAM, 94% Flash Memory.
GSM_2017_04_30-12-57.hex - Временно включён вывод дополнительной информации в консоль при отправке смс сообщений и формировании ответа на команду Info. Возможно исправлен баг с командой Info. Оптимизация памяти. Занято: 66% SRAM, 92% Flash Memory.
GSM_2017_05_06-11-52.hex - Исправлен с функцией DelayBeforeAlarm. Занято: 66% SRAM, 93% Flash Memory.
GSM_2017_05_23-21-27.hex - Незначительно изменён вывод информации в консоль. Добавлена поддержка модулей расширения портов на PCF8574A c адресами от 0x38 до 0x3f включительно. Исправлен баг c . Теперь устройство перезагружается автоматически после команд FullReset, ResetConfig, ResetPhone и в случае успешного выполнения команды MemTest. Добавлена команда WatchPowerTime. Теперь возможно установить время, по истечении которого будет отправлено смс сообщение об отключении внешнего источника питания. Занято: 67% SRAM, 94% Flash Memory.
GSM_2017_05_26-20-22.hex - Исправлена инициализация памяти датчиков платы расширения. Изменён синтаксис команды AddPhone. Добавлена команда EditMainPhone. Изменен принцип работы системы уведомлений, при срабатывании датчика сначала будут отправлены sms сообщения, после чего будут совершены голосовые вызовы. Тревожные sms сообщения будут отправлены на телефонные номера с признаком «S» (SMS). Голосовые вызовы будут совершены на номера с признаком «R» (Ring). Сообщения об отключении/включении внешнего источника питания будут отправлены на телефонные номера с признаком «P» (Power). Добавлена команда RingTime. Теперь возможно установить длительность тревожного голосового вызова, параметр может иметь значение от 10 до 255 секунд. Теперь команда RingOn/RingOff глобально включает/отключает оповещение голосовыми вызовами. Добавлена команда ResetSensor. Занято: 68% SRAM, 99% Flash Memory.
GSM_2017_06_02-17-43.hex - Командам AddPhone и EditMainPhone добавлен параметр «I» (Info), отвечающий за sms уведомление о постановке или снятии устройства с охраны. Теперь после добавления основного номера устройство автоматически перезагружается. Теперь можно вносить в память устройства одинаковые номера. При добавлении второго и последующих дублирующихся номеров с них автоматически будут сняты атрибуты «M», «S», «P» и «I». Эти номера будут использованы для повторного голосового вызова при срабатывании датчиков. Исправлен баг кривого вывода в консоль после выполнения команды AddPhone, теперь информация не выводится автоматически после добавления номера. Добавлена команда Reboot. Занято: 69% SRAM, 99% Flash Memory.
GSM_2017_06_11-00-07.hex - Теперь вновь при замыкании контактов основного герконового датчика (закрытии двери) устройство мигает синим светодиодом в течение 2 секунд, сигнализируя о нормальной работе датчика, при этом не учитывается поставлено или снято устройство с охраны. Команды RingOn/RingOff удалены. Теперь устройство можно снять с охраны во время тревожного вызова, теперь они совершаются в фоновом режиме. Занято: 69% SRAM, 99% Flash Memory.
GSM_2017_07_04-21-52.hex - Теперь команда Pause не присылает ответное смс. Удалены команды TestOn и TestOff. У всех номеров удалён признак Management. Занято: 68% SRAM, 96% Flash Memory.
GSM_2017_07_24-12-02.hex - Добавлены команды ReedSwitchOn/ReedSwitchOff для мониторинга основного герконовго датчика, теперь его можно включать/отключать так же как и датчик движения. Исправлен баг команды Info. Команды TestOn и TestOff снова присутствуют в прошивке. Занято: 68% SRAM, 96% Flash Memory.
GSM_2017_07_26-10-03.hex - Добавлена команда ModemID. Автоматическое определение модема осуществляется только если значение этого параметра равно 0. После установки значения параметра равным 0 производится автоматическая перезагрузка устройства. Занято: 68% SRAM, 98% Flash Memory.
GSM_2017_08_03-22-03.hex - Теперь сигнализация может управлять внешними устройствами. Для управления используется аналоговый выход A3 (D17 - используется как цифровой). Логический уровень выхода (+5В или GND) может быть изменен, после изменения уровня через команду настройки устройство автоматически будет перезагружено. Длительность сигнала управления внешним устройством может быть изменена. Добавлены команды ExtDeviceLevelLow, ExtDeviceLevelHigh, ExtDeviceTime, Open. Некоторые изменения в логике работы команд управления. Оптимизация памяти. Занято: 68% SRAM, 99% Flash Memory.
GSM_2017_08_10-12-17.hex - Удалены команды SmsOn/SmsOff, ReedSwitchOn/ReedSwitchOff, PIROn/PIROff и всё что с ними связано. Команда DelayBeforeAlarm заменена расширенными командами. Изменён вывод команды Info. Оптимизирован вывод команды ListConfig в консоль. Теперь к пинам D6 и A0 могут быть подключены любые цифровые датчики с высоким или низким уровнем срабатывания, в том числе герконы. Пины D6 и A0 должны быть притянуты к земле (GND) через сопротивление 10 (20) кОм. Если датчик настроен на низкий уровень срабатывания (включен в режиме геркона), то проверяется целостность цепи. Логический уровень срабатывания по входам D6 и A0 (+5В или GND) может быть изменен, после изменения логического уровня устройство автоматически будет перезагружено. Для каждого из датчиков (main, second, PCF-платы расширения) при срабатывании может быть установлено своё время по истечение которого будет осуществлено уведомление (смс и/или голосовой вызов). «PIR Sensor» переименован в «Second sensor». Исправлена работа платы расширения, ошибка из-за которой устройство всегда уведомляло о срабатывании датчиков, вне зависимости от того поставлено устройство на охрану или нет. Теперь можно выбрать режим работы при котором устройство может мониторить датчики платы расширения как во включенном режиме охраны (GuardOn), так и при выключенном режиме (GuardOff). Добавлены команды PCFForceOn/PCFForceOff, MainSensorLevelHigh/MainSensorLevelLow/MainSensorLevelOff, SecondSensorLevelHigh/SecondSensorLevelLow/SecondSensorLevelOff, MainDelayBeforeAlarm, SecondDelayBeforeAlarm, PCFDelayBeforeAlarm. Занято: 68% SRAM, 99% Flash Memory.

*Последующие версии прошивок включают в себя изменения предыдущих версий.


Используемые порты Arduino Nano v3

D4 - выход «тревожного» пина, при срабатывании датчика на этом пине устанавливается сигнал высокого уровня
D5 - инверсный выход «тревожного» пина, при срабатывании датчика на этом пине устанавливается сигнал низкого уровня

D6 - герконовый датчик. Начиная с версии GSM_2017_08_10-12-17.hex к пину D6 могут быть подключены любые цифровые датчики с высоким или низким уровнем срабатывания, в том числе герконы. Пин D6 должен быть притянут к земле (GND) через сопротивление 10 (20) кОм.
D7 - подключен к делителю напряжения от внешнего источника питания +5В. Верхнее плечо 2,2 кОм, нижнее 3,3 кОм.

Делитель напряжения


D8 - модем TX
D9 - модем RX

D10 - красный светодиод
D11 - синий светодиод
D12 - зеленый светодиод

Подключение периферии:
A0 - датчик движения . Начиная с версии GSM_2017_08_10-12-17.hex к пину A0 могут быть подключены любые цифровые датчики с высоким или низким уровнем срабатывания, в том числе герконы. Пин A0 должен быть притянут к земле (GND) через сопротивление 10 (20) кОм.

A1 - Вход для внешнего управления. Сигнализация ставит/снимает охрану при появлении на входе высокого уровня +5В.
A2 - Инверсный вход для внешнего управления. Сигнализация ставит/снимает охрану при появлении на входе низкого уровня GND.

A3 - Настраиваемый (+5В или GND) выход для управления внешними устройствами. При поступлении команды управления значение на этом выходе изменяется в зависимости от того какое было установлено на установленный промежуток времени.

A4 - SDA I2C
A5 - SLC I2C
, для подключения дополнительных 8 датчиков.


Команды управления для hex - прошивки

Внимание! Команды выделенные жирным шрифтом могут быть выполнены только с основного номера, так как отвечают за конфигурацию устройства. Остальные команды могут быть выполнены с номеров с признаком «Management».

SMS - команды управления не чувствительны к регистру :
AddPhone - Добавить номер телефона. Всего может быть добавлено не более 9 номеров + 1 основной номер который автоматически сохраняется в память при первом звонке на устройство после сброса на заводские установки командами ResetPhone или FullReset . Т.е. кто первый позвонил на устройство после его сброска на заводские установки тот и и «главный», этот номер заносится в первую ячейку памяти и его невозможно изменить или удалить через смс. Невозможно добавить два одинаковых номера.
Пример команды:



Синтаксис команды:

AddPhone - команда
: - разделитель
5 - записать в пятую ячейку памяти
+71234567890 - номер телефона
До версии GSM_2017_05_26-20-22.hex:
а - Параметр «Alarm» - на номера с этим параметром будут отправляться смс - сообщения о срабатывании сигнализации и сообщения постановке или снятии с охраны.
Начиная с версии GSM_2017_05_26-20-22.hex:
m - Параметр «Management» - разрешено управление сигнализацией
s - Параметр «SMS» - будет отправлено sms сообщение при срабатывании датчиков
r - Параметр «Ring» - будет совершен голосовой вызов при срабатывании датчиков
p - Параметр «Power» - будет отправлено sms сообщение при включении/отключении внешнего питания
i - Параметр «Info» - будет отправлено sms сообщение при постановке или снятии с охраны
При отсутствии параметров «m», «s», «r», «p»,«i» телефон заносится в память, но никак не используется.


DeletePhone - Удалить номер телефона.
Пример команды:

Синтаксис команды:

DeletePhone - команда
: - разделитель
+71234567891 - номер телефона


EditMainPhone - Изменить параметры «s», «r», «p», «i» основного телефона, этот номер занесён в первую ячейку памяти.
Пример команды:

Синтаксис команды:

EditMainPhone - команда
: - разделитель
srpi - параметры


BalanceNum - Изменение номера запроса баланса и обработка длины ответа запроса. Значение по умолчанию для Beeline: #100#L22.
Пример команды:

Синтаксис команды:

BalanceNum - команда
: - разделитель
#103# - номер запроса баланса
L24 - Длина (len) пересылаемого ответа 24 символа, обрезаем спам из запроса баланса.


EditSensor - Изменить название датчика и логический уровень срабатывания. Всего может быть не более 8 дополнительных датчиков. После изменения параметров необходима перезагрузка устройства.
Пример команды:
EditSensor:1+Datchik dvizheniya v koridore#h

Синтаксис команды:

EditSensor - команда
: - разделитель
1 - записать в первую ячейку памяти
+ - разделитель
Datchik dvizheniya v koridore - название датчика, не может превышать 36 символов, включая пробелы.
#h - Признак высокого логического уровня с датчика, при получении которого сработает сигнализация. Если отсутствует "#h", сигнализация будет срабатывать при получении с датчика низкого логического уровня.


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

Синтаксис команды:

SleepTime - команда
: - разделитель
20 - 20 минут «сна».


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

Синтаксис команды:

AlarmPinTime - команда
: - разделитель
30 - 30 секунд включения/выключения тревожного пина.


DelayBeforeGuard - Время до постановки устройства на охрану, после получения соответствующей команды.
Пример команды:

Синтаксис команды:

DelayBeforeGuard - команда
: - разделитель
25 - 25 секунд до постановки на охрану


DelayBeforeAlarm - Время по истечении которого будет отправлено «тревожное» смс уведомление, если за этот период времени сигнализация не была снята с охраны. Заменена расширенными командами начиная с версии GSM_2017_08_10-12-17.hex
Пример команды:

Синтаксис команды:

DelayBeforeAlarm - команда
: - разделитель
40 - 40 секунд до отправки «тревожного» уведомления


WatchPowerTime - Время в минутах по истечении которого будет отправлено смс сообщение об отключении внешнего источника питания. Если внешнее питание будет восстановлено до истечения установленного времени, то сообщение не будет отправлено.
Пример команды:

Синтаксис команды:

WatchPowerTime - команда
: - разделитель
5 - 5 минут до отправки смс сообщения


RingTime - Длительность тревожного голосового вызова, параметр может иметь значение от 10 до 255 секунд.
Пример команды:

Синтаксис команды:

RingTime - команда
: - разделитель
40 - 40 длительность вызова составит 40 секунд, после чего будет вызван следующий абонент.


ModemID - Принудительная установка модели используемого модема. Возможные значения: 0 - автоопределение модема, 1 - M590, 2 - SIM800l, 3 - A6_Mini.
Пример команды:

Синтаксис команды:

ModemID - команда
: - разделитель
2 - ID модема.


ExtDeviceTime - Количество секунд на которое изменится уровень сигнала на выходе управления внешним устройством.
Пример команды:

Синтаксис команды:

ExtDeviceTime- команда
: - разделитель
5 - 5 секунд


ExtDeviceLevelLow - Внешнее устройство подключенное к выходу A3 управляется низким уровнем сигнала (GND). На выходе по умолчанию будет присутствовать высокий уровень +5В, пока не поступит команда управления внешним устройством
ExtDeviceLevelHigh - Внешнее устройство подключенное к выходу A3 управляется высоким уровнем сигнала (+5V). На выходе по умолчанию будет присутствовать низкий уровень GND, пока не поступит команда управления внешним устройством

ResetSensor - сброс параметров датчиков расширителя порта

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

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

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

RingOn - включить уведомление звонком на «главный» номер записанный в первую ячейку памяти при срабатывании датчика. Удалена начиная с версии GSM_2017_06_11-00-07.hex
RingOff - выключить уведомление звонком при срабатывании датчика. Удалена начиная с версии GSM_2017_06_11-00-07.hex

SmsOn - включить sms-уведомление при срабатывании датчика. Удалена начиная с версии GSM_2017_08_10-12-17.hex
SmsOff - выключить sms-уведомление при срабатывании датчика. Удалена начиная с версии GSM_2017_08_10-12-17.hex

PIROn - включить обработку датчика движения
PIROff - выключить обработку датчика движения

ReedSwitchOn - включить обработку основного герконового датчика
ReedSwitchOff - выключить обработку основного герконового датчика

WatchPowerOn - включить контроль внешнего питания, смс сообщение об отключении внешнего питания будет отправлено при условии что сигнализация поставлена на охрану. Удалена начиная с версии GSM_2017_03_01-23-37.

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

WatchPowerOff - выключить контроль внешнего питания

GuardButtonOn - управление сигнализацией внешними устройствами или кнопкой включено Удалена начиная с версии GSM_2017_04_16-12-00.
GuardButtonOn1 - функция постановки или снятия охраны внешними устройствами или кнопкой включена
GuardButtonOn2 - функция только постановки на охрану внешними устройствами или кнопкой включена, снятие с охраны производится по звонку на устройство или с помощью смс команды.
GuardButtonOff - управление сигнализацией внешними устройствами или кнопкой выключено

PCFForceOn - постоянный мониторинг группы всех датчиков модуля расширения
PCFForceOff - мониторинг группы всех датчиков модуля расширения только при постановке устройства на охрану

MainSensorLevelHigh - тревожное уведомление будет отправлено при появлении сигнала высокого уровня (+5 В) на входе (D6) от датчика
MainSensorLevelLow - тревожное уведомление будет отправлено при появлении сигнала низкого уровня (GND) на входе (D6) от датчика
MainSensorLevelOff - обработка датчика на входе (D6) отключена

SecondSensorLevelHigh - тревожное уведомление будет отправлено при появлении сигнала высокого уровня (+5 В) на входе (A0) от датчика
SecondSensorLevelLow - тревожное уведомление будет отправлено при появлении сигнала низкого уровня (GND) на входе (A0) от датчика
SecondSensorLevelOff - обработка датчика на входе (A0) отключена

MainDelayBeforeAlarm - время по истечении которого будет отправлено «тревожное» смс уведомление при срабатывании основного датчика (D6), если за этот период времени сигнализация не была снята с охраны. Синтаксис аналогичен команде DelayBeforeAlarm.
SecondDelayBeforeAlarm - время по истечении которого будет отправлено «тревожное» смс уведомление при срабатывании дополнительного датчика (A0), если за этот период времени сигнализация не была снята с охраны. Синтаксис аналогичен команде DelayBeforeAlarm.
PCFDelayBeforeAlarm - время по истечении которого будет отправлено «тревожное» смс уведомление при срабатывании датчиков платы расширения (PCF8574), если за этот период времени сигнализация не была снята с охраны. Синтаксис аналогичен команде DelayBeforeAlarm.

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

Open - команда управления внешним устройством

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

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

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

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

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

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

Консольные команды (до версии GSM_2017_04_24-13-22.hex) - вводятся в мониторе порта Arduino IDE:

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

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

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

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

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

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

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

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

WatchPowerOn1 - аналогична sms-команде WatchPowerOn1
WatchPowerOn2 - аналогична sms-команде WatchPowerOn2
WatchPowerOff - аналогична sms-команде WatchPowerOff

GuardButtonOn - аналогична sms-команде GuardButtonOn . Удалена начиная с версии GSM_2017_04_16-12-00
GuardButtonOn1 - аналогична sms-команде GuardButtonOn1
GuardButtonOn2 - аналогична sms-команде GuardButtonOn2
GuardButtonOff - аналогична sms-команде GuardButtonOff

Memtest - тест энергонезависимой памяти устройства, все настройки устройства будут сброшены, аналогично команде FullReset.

I2CScan - поиск и инициализация поддерживаемых устройств на шине I2C.

ListConfig - вывод в монитор порта текущей конфигурации устройства.

ListSensor - вывод в монитор порта текущей конфигурации датчиков.

UPD. При использовании датчика движения , для исключения ложных срабатываний при работе модема, необходимо между пинами GND и A0 Arduino поставить сопротивление , спасибо говорим товарищу
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.
* В коде присутствует функция LedTest(), она мигает синим светодиодом, сделана лишь для того чтобы мониторить Arduino, мигает - значит работает, не мигает - зависла. Пока ещё не зависала:)

НЕ Актуально!

Подключение 2 и более датчиков для открытых прошивок (касается только этой прошивки sketch_02_12_2016.ino)
Для подключения дополнительных герконовых датчиков используем свободные цифровые пины 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 кОм.

На этом пока всё. Спасибо за внимание! :)

Планирую купить +207 Добавить в избранное Обзор понравился +112 +243

GSM сигнализация на Arduino

В этой статье вы узнаете как (купить) сделать самому GSM сигнализацию с помощью GSM модуля и Arduino очень дешево. Обьектом охраны GSM сигнализации идеально подойдет дача, дом, гараж, квартира.


Шаг 1: Элементы
Для этого проекта вам понадобится:


GSM Shield

Зуммер
Сирена сигнализации 12V
12V источник питания

Клавиатура для Arduino
Корпус.

Шаг 2: Подключение компонентов


Сначала вы поместите GSM модуль на Arduino Uno, вам нужно будет припаять провода GND и VCC вместе с двумя датчиками, зуммером и входом модуля реле. После этого соединить эти припаяные провода на соответствующий разъем GSM шилда. Далее вы будете делать разъем ввода / вывода сигналов из этих частей, и последнее, что нужно будет - это подключить клавиатуру

Arduino Uno / GSM Клеммы:

Вывод 0: не связанный;
Вывод 1: не связанный;
Вывод 2: несвязанный (GSM будет использовать этот штырь);
Вывод 3: несвязанный (GSM будет использовать этот штырь);
Вывод 4: последняя строка с помощью клавиатуры (контакт клавиатуры 4 - от 8);
Вывод 5: не связанный;
Вывод 6: второй столбец с помощью клавиатуры (контакт клавиатуры 6 - с 8);
Вывод 7: третья колонка с клавиатуры (клавиатуры пальца 7 - от 8);
Вывод 8: несвязанный (GSM будет использовать этот штырь);
Вывод 9: несвязанный (GSM будет использовать этот штырь);
Вывод 10: данные PIR датчика № 2;
Вывод 11: сирена звуковой сигнал (поступает на вход модуля реле);
Вывод 12: данные PIR датчика № 1;
Вывод 13: входной сигнал зуммера;

Как можно видеть, хотя клавиатура имеет 8 выводов, подключились только три (одна строка и две колонки, что позволяет использовать два числа для чтения - 1 × 2 матрицы), таким образом я могу сделать пароли, используя эти три провода, и нет необходимости использовать все контакты с клавиатуры. Это происходит потому, что после того, как датчик движения обнаруживает человека, идущего в комнате, человек будет иметь всего 5 секунд, чтобы отключить сигнализацию. После того, как аварийный сигнал не отключается на данный момент времени, GSM шилд отправляет SMS вам, или звонит на номер телефона. Arduino был запрограммирован на вызов и как только вы ответить на телефонный звонок, он положит трубку.

Конечно, можно получить ложные показания датчика, поэтому стоит опция, чтобы отключить сигнализацию, просто отправив СМС с вашего телефона на Arduino. Кроме того, еще один вариант, что вы можете сделать, это настроить шилд, чтобы он отправлял вам одно сообщение в день, чтобы вы знали, что он работает правильно.

Шаг 3: Код

Просто загрузите приведенный ниже код и скомпилируйте. Он использует библиотеки Keypad.h и GSM.h.
Скачать файл: (cкачиваний: 181)
Скачать файл: (cкачиваний: 104)

Шаг 4: Заключение


Учитывая, что код Arduino Uno будет отправлять SMS-сообщения и звонить на ваш телефон всего за пять секунд после того, как кто-то проникнуть в ваш дом, я предполагаю, что у вас будет достаточно времени, чтобы позвонить в полицию. Конечно сирена будет отпугивать воров и ваш дом или другое помещение станет безопаснее с помощью этой статьи.