Некий прототип приспособления для открытия ворот с использованием ардуино, реле, модуля GSM, карты памяти и внешней i2c памяти EEPROM

Старик Похабыч

★★★★★★★
14 Авг 2019
4,266
1,303
Москва
Т.к. это прототип и не является полноценным проектом, то выкладываю код тут. Послужит некоторым примером. Однако код далеко не оптимизирован , это не коммерческая версия, хотя и полностью рабочая. Код предоставлен исключительно в образовательных целях, будут какие то конкретные вопросы - отвечу. Подробного разжевывания подключения не будет, т.к. предполагается, что основные знания у смотрящих присутствуют.

Коротко о подключении:
EEPROM подключается по i2c к А4 и А5 c подтяжкой этих линий резисторами 4.7 к +5в

GSM модуль используется SIM800L, он требует весьма качественного и ровного питания. Подключается по softserial c преобразованием уровня к 8 и 9 пинам. Из необычного через NPN транзистор , который управляется с 7 го пина выход resrt подключен к земле, что позволяет перегрузить модуль GSM в случае необходимости.

Реле обычное 5-вольтовое, модулем, подключено к 6-му пину.

Карта SD подключена по стандартному SPI интерфейсу, CS выведен на 10 пин.


Задумка того как это работает:
На внешней EEPROM хранится белый список номеров телефонов в таком формае: по 0-му адресу 2 байта занимает количество номеров телефона. Далее по 11 байт хранятся номера телефонов в формате 79123456789, список номеров должен быть обязательно отсортирован в порядке возрастания, т.к. на этом принципе основан поиск. При входящем звонке определяется номер телефона и звонок сбрасывается. Если входящий номер есть в белом списке - то на короткое время срабатывает реле. Если номера нет, то по определенному номеру (мастер-номер) отправляется смс с уведомлением.
Данные о поступившем звонке и совершенном действии записываются в лог файл на карте SD:
21/01/17,02:06:00 79511223344 OPEN
21/01/17,02:06:12 71234567890 SMS!
Если вдруг происходит зависание стоит вочдог, который перегружает полностью систему вместе с GSM модулем

Чему можно научиться:
Работать с внешней памятью EEPROM, поиску по памяти.
Получать номер входящего звонка, отправлять CMC, настраивать связь
Получать время звонка из сети GSM
Читать данные с карты, записывать, дописывать логи. Считать объем данных на карте.
Как записывать дату и время изменения в свойства файла - иначе дата и время будет у всех файлов одни и те же, какие то начальные с нулями.
Посмотреть как работает вочдог.
Посмотреть функцию, которая отображает кол-во свободной памяти.
Часть кода взято из инета и была несколько доработана.

Чего нет:
Не объясняю как записывал начальные данные во внешнюю память, варианты могут быть разные.
Нет разных коммерческих штучек. И не будет.
Нет схемы подключения. Если не понимаете как подключить, то возможно Вам это еще рано.

Ограничения. Функция работы с картой памяти для вычисления общего объема рекурсивна, и требует определенного объема свободной памяти. В случае с нано можно быстро упереться в ограничения . Данная программа работает без сбоев, но любые доработки и добавления, требующие больше ОЗУ могут нарушить ее работоспособность. Лично я перешел на мегу.

Данное устройство может служить дополнением к воротам и шлагбаумам doorhan или подобны устройствам, которые могут открываться по замыканию 2-х контактов.
 

Вложения

Изменено:

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
как то делал подобное, только логи сразу на сервер отправлялись, так надежнее, возможно и тут стоит добавить.

P.S. в названии темы опечатка "модуля GPS" -> "модуля GSM"
 

enemy_krs

★✩✩✩✩✩✩
28 Май 2019
104
37
я храню в похожем устройстве номера на симке, что бы даже во время моего отсутствия можно было добавить новый
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,266
1,303
Москва
Вариантов масса. Я тестировал на 700 номерах в памяти, поиск быстрый, но добавление и удаление занимает определенное существенное время, поэтому предполагается замена всего списка путем замены модуля EEPROM. Приехал, заменил, уехал. Для частных домов вполне подойдет и добавление/удаление по смс. Изменение мастер номера возможно так же по смс, на время отсутствия. Но если утеря доступ к мастер номеру. то только прошивать с новым мастером.
Так же дорабатываются дополнительные возможности изменения (по файлу на карте sd, ftp, вот не уверен насчет получения письма по электронной почте)
 

xof

★✩✩✩✩✩✩
24 Окт 2020
123
44
Делал что-то похожее, но все данные хранил в sql базе. И когда было надо делал post (в джейсоне номер звонящего) через сим800 на апи (asp.net), там всё проверялось и в ответ приходило ОК или НОК. Ну и дальше остальная логика.
Для меня с таким вариантом и сама реализация в железе проще, и дальнейшее обслуживание (туда же прикрутил андроид приложение чтобы можно было удалённо с телефона что либо добавлять, удалять и т.п.).
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,266
1,303
Москва
@xof, Сколько времени занимала обработка входящего звонка ? на сколько это критично в Ваше задаче ?
В таком виде сброс звонка идет через 1 секунду и еще через пол срабатывание реле.
Я специально разместил это не в проектах, а в программировании, т.к. это тестовая прошивка как все будет работать, на сколько устойчиво, возможно кому то поможет.
 

xof

★✩✩✩✩✩✩
24 Окт 2020
123
44
@xof, Сколько времени занимала обработка входящего звонка ? на сколько это критично в Ваше задаче ?
В таком виде сброс звонка идет через 1 секунду и еще через пол срабатывание реле.
Я специально разместил это не в проектах, а в программировании, т.к. это тестовая прошивка как все будет работать, на сколько устойчиво, возможно кому то поможет.
В моём случае было не критична небольшая задержка (до 10с.). Но на деле, после первого запроса (в итоге делал чтобы раз в пару минут, если ничего не происходит, дёргался сим800 и говорил с апи, чтобы точно никто нигде не засыпал) всё обрабатывалось секунды за 2-3 (при звонке запоминается номер и сразу сбрасывается, всё как у Вас, ну и обычно до секунды на разговор с апи) + манипуляции с реле\транзисторами и прочая логика до действия.

Специально попробовал сейчас дёрнуть апи, проверить ещё раз ))
1614161091230.png
 

Un_ka

★★✩✩✩✩✩
13 Июл 2020
243
77
других форумов.
Какие тарифы используете?
Каков алгоритм действий при пропаже сигнала gsm/выхода из строя одной из частей системы?
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,266
1,303
Москва
Тариф какой был. Т.к. в основном входящие звонки идут менее 5 сек, то не сильно принципиально. Но безлимитный инет - могу почту
В данной версии ошибки почти не отлавливаются, только вочдог и проверка свободной памяти в достаточном объеме для работы

А так.. при невозомжности связаться с SIM идет циклическая перегрузка, т.к. сообщить что то сложно в данном случае.
Если не работает карта SD , то работа без логов. Уведомление по SMS
Если не работает EEPROM , то работа осуществлятется только с мастер номером, уведомление по SMS