Проект GSM/GPRS сигнализации на Arduino ч.3
Всех с праздником. Продолжаем совершенствовать нашу сигнализацию. Согласитесь, что ей очень не хватает беспроводных датчиков. Один из подписчиков попросил добавить в сигнализацию ИК-передатчик для управления кондиционером. Мы решили этот вопрос несколько иначе, но сама идея передачи данных по ИК-каналу мне понравилась. Комплектующие стоят копейки. Имеется уже готовая библиотека IRremote, позволяющая принимать и отправлять данные по ИК-каналу. Минусом данной технологии можно считать только необходимость прямой видимости между передатчиком и приёмником. При этом ИК-приёмник отлично принимает отражённый от стен и потолка инфракрасный свет. Та что не обязательно, чтобы ик-диод был направлен непосредственно на него. Таким образом, если датчики и сигнализация расположены в одной комнате, можно неплохо сэкономить на комплектующих.
Для того, чтобы сигнализация могла принимать ИК-команды, в неё нужно добавить ИК-приёмник. Я использовал TSOP31238 на 38 кГц . Можно взять любой другой, желательно этой же частоты, т.к. она применяется чаще всего.
Первая ножка модуля - земля, вторая +5В, третья - информационный выход. Его соединяем с 11 пином Ардуины в сигнализации. У других ИК-приёмников распиновка может отличаться.
Далее открываем файл настроек проекта libraries/main_type/settings.h
Подключаем библиотеку ИК-датчика через дефайн, записав в него 1.
# define IR_ENABLE 1 // библиотека для ик приёмника
Затем добавляем ИК-датчик в массив датчиков:
где
IR_SENSOR - тип датчика
"IR_0" - уникальное имя датчика. Будет выводиться в отчётах. Пишите любое своё, например "OKNO" или "KOMNATA".
0x41038C7 - 32 разрядное кодовое слово, передаваемое беспроводным датчиком при срабатывании. Можно указать любое другое. Оно будет отправляться датчиком при тревоге. Соответственно это же слово нужно зашить в датчик.
Если ИК-датчиков несколько, можно настроить их на передачу разных слов, тогда в массиве каждый датчик нужно прописать отдельно. Это позволит их различать.
Прошиваем сигнализацию.
Теперь настало время собрать беспроводной ИК-датчик.
Для этого нам понадобится Ардуино Нано, ИК-диод, чем мощнее, тем лучше. Его нужно подключить к 3 пину Ардуины через ограничивающий резистор 33-220 Ом. Далее начиная с 4 пина подсоединяем любые датчики. Точно так же, как мы это делали в сигнализации. Оба проекта используют одни и те же библиотеки.
Затем открываем файл настроек settings.h
Задаём код, который будет отправляться на ИК-приёмник. Мы уже указывали его при настройке датчиков сигнализации. Код должен совпадать, чтобы сигнализация могла понять, кто сработал.
#define IR_CODE 0x41038C7
Далее указываем размер отправляемого слова в битах
#define IR_CODE_BIT_SIZE 32
В примере проекта к беспроводному датчику подключено два сенсора, геркон и датчик движения. Поэтому мы сначала задаём номера пинов для сенсоров, начиная с 4 (4 и 5 в данном случае). Затем записываем в массив сенсоров два датчика.
На этом настройка проекта завершена. Можно прошиваться.
При срабатывании подключенного сенсора Ардуина ИК-датчика начнёт отправлять указанное нами слово по ИК-каналу. Количество повторов отправки определено дефайном
# define ALARM_MAX_TIME 10
Отправка слова производится раз в секунду.
Сигнализация примет это слово, сравнит с заданным в своих настройках, и при совпадении сработает режим тревоги.
Иногда мощности питания от порта Ардуины не хватает ИК-диоду, чтобы послать сигнал на большое расстояние. Тогда следует питать его напрямую от источника питания через транзистор. Например по такой схеме.
Обновлённая прошивка с проектом для ИК-датчика IRsensor лежит здесь
https://github.com/wisenheimer/Arduino
Так же необходимо установить через Arduino IDE библиотеку IRremote
или скачать её по этой ссылке https://github.com/z3t0/Arduino-IRremote
PS
В проекте добавилась новая библиотека для работы с датчиками температуры на основе термистора. Все необходимые коэффициенты задаются в самой библиотеке.
----------------
В следующей части постараюсь показать беспроводной датчик c Wi-Fi модулем.
Всем добра.