173

Проект GSM/GPRS сигнализации на Arduino ч.3

Всех с праздником. Продолжаем совершенствовать нашу сигнализацию. Согласитесь, что ей очень не хватает беспроводных датчиков. Один из подписчиков попросил добавить в сигнализацию ИК-передатчик для управления кондиционером. Мы решили этот вопрос несколько иначе, но сама идея передачи данных по ИК-каналу мне понравилась. Комплектующие стоят копейки. Имеется уже готовая библиотека IRremote, позволяющая принимать и отправлять данные по ИК-каналу. Минусом данной технологии можно считать только необходимость прямой видимости между передатчиком и приёмником. При этом ИК-приёмник отлично принимает отражённый от стен и потолка инфракрасный свет. Та что не обязательно, чтобы ик-диод был направлен непосредственно на него. Таким образом, если датчики и сигнализация расположены в одной комнате, можно неплохо сэкономить на комплектующих.

Для того, чтобы сигнализация могла принимать ИК-команды, в неё нужно добавить ИК-приёмник. Я использовал TSOP31238 на 38 кГц . Можно взять любой другой, желательно этой же частоты, т.к. она применяется чаще всего.


Первая ножка модуля - земля, вторая +5В, третья - информационный выход. Его соединяем с 11 пином Ардуины в сигнализации. У других ИК-приёмников распиновка может отличаться.

Проект GSM/GPRS сигнализации на Arduino ч.3 Сигнализация, Arduino, Sim800l, Gsm, Gprs, Ик-порт, Ик приёмник, Длиннопост

Далее открываем файл настроек проекта libraries/main_type/settings.h

Подключаем библиотеку ИК-датчика через дефайн, записав в него 1.

# define IR_ENABLE 1 // библиотека для ик приёмника

Затем добавляем ИК-датчик в массив датчиков:

Проект GSM/GPRS сигнализации на Arduino ч.3 Сигнализация, Arduino, Sim800l, Gsm, Gprs, Ик-порт, Ик приёмник, Длиннопост

где

IR_SENSOR - тип датчика

"IR_0" - уникальное имя датчика. Будет выводиться в отчётах. Пишите любое своё, например "OKNO" или "KOMNATA".

0x41038C7 - 32 разрядное кодовое слово, передаваемое беспроводным датчиком при срабатывании. Можно указать любое другое. Оно будет отправляться датчиком при тревоге. Соответственно это же слово нужно зашить в датчик.

Если ИК-датчиков несколько, можно настроить их на передачу разных слов, тогда в массиве каждый датчик нужно прописать отдельно. Это позволит их различать.


Прошиваем сигнализацию.


Теперь настало время собрать беспроводной ИК-датчик.


Для этого нам понадобится Ардуино Нано, ИК-диод, чем мощнее, тем лучше. Его нужно подключить к 3 пину Ардуины через ограничивающий резистор 33-220 Ом. Далее начиная с 4 пина подсоединяем любые датчики. Точно так же, как мы это делали в сигнализации. Оба проекта используют одни и те же библиотеки.

Проект GSM/GPRS сигнализации на Arduino ч.3 Сигнализация, Arduino, Sim800l, Gsm, Gprs, Ик-порт, Ик приёмник, Длиннопост

Затем открываем файл настроек settings.h

Задаём код, который будет отправляться на ИК-приёмник. Мы уже указывали его при настройке датчиков сигнализации. Код должен совпадать, чтобы сигнализация могла понять, кто сработал.

#define IR_CODE 0x41038C7

Далее указываем размер отправляемого слова в битах

#define IR_CODE_BIT_SIZE 32

В примере проекта к беспроводному датчику подключено два сенсора, геркон и датчик движения. Поэтому мы сначала задаём номера пинов для сенсоров, начиная с 4 (4 и 5 в данном случае). Затем записываем в массив сенсоров два датчика.

Проект GSM/GPRS сигнализации на Arduino ч.3 Сигнализация, Arduino, Sim800l, Gsm, Gprs, Ик-порт, Ик приёмник, Длиннопост

На этом настройка проекта завершена. Можно прошиваться.


При срабатывании подключенного сенсора Ардуина ИК-датчика начнёт отправлять указанное нами слово по ИК-каналу. Количество повторов отправки определено дефайном

# define ALARM_MAX_TIME 10

Отправка слова производится раз в секунду.

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


Иногда мощности питания от порта Ардуины не хватает ИК-диоду, чтобы послать сигнал на большое расстояние. Тогда следует питать его напрямую от источника питания через транзистор. Например по такой схеме.

Проект GSM/GPRS сигнализации на Arduino ч.3 Сигнализация, Arduino, Sim800l, Gsm, Gprs, Ик-порт, Ик приёмник, Длиннопост

Обновлённая прошивка с проектом для ИК-датчика IRsensor лежит здесь

https://github.com/wisenheimer/Arduino


Так же необходимо установить через Arduino IDE библиотеку IRremote

Проект GSM/GPRS сигнализации на Arduino ч.3 Сигнализация, Arduino, Sim800l, Gsm, Gprs, Ик-порт, Ик приёмник, Длиннопост

или скачать её по этой ссылке https://github.com/z3t0/Arduino-IRremote


PS

В проекте добавилась новая библиотека для работы с датчиками температуры на основе термистора. Все необходимые коэффициенты задаются в самой библиотеке.

----------------

В следующей части постараюсь показать беспроводной датчик c Wi-Fi модулем.


Всем добра.

Arduino & Pi

1.5K поста20.8K подписчика

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

• Рассуждать на темы политики

• Нарушать установленные правила Пикабу

2
Автор поста оценил этот комментарий
Я так и не понял, при чем тут кондиционер?
раскрыть ветку (1)
3
Автор поста оценил этот комментарий

Человек хотел управлять кондиционером удалённо при помощи сигнализации. Записать в неё команды, и отсылать по ИК каналу на кондиционер за место пульта. Чтобы включать его заранее перед приездом. Дом в деревне, интернета нет.

показать ответы
0
Автор поста оценил этот комментарий
А почему команд на ir так мало? Добавь несколько команд. Сам подобное хочу сделать, но только для кондиционера и телевизора.

почему несколько команд... например +26°с и +24°с с таймером отключения кондиционера через час(функция самого кондиционера.пульт кондея отправляет сразу весь перечень настроек для кондея, потому хватит максимум 10-15 команд. )
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Я не стал реализовывать управление кондиционером. Потому что заказчик, его кондиционер, и пульт от него находятся в другом городе. Это оказалось не реально. Каждый кондиционер имеет свой протокол. Разная кодировка, разная длина, разные паузы между пакетами. Это надо смотреть на осциллографе, что там принимается, разбираться в протоколе. Писать программу под конкретный кондиционер. И нужно потом проверить, откликнется ли он на нашу команду. Так что взять и написать что-то универсальное не получится.


А почему команд на ir так мало?

В данной реализации сигнализация ничего не отправляет. В ней нет ик диода. Она только принимает сигнал от датчика. Один датчик - один сигнал.


Есть библиотека для нескольких марок кондиционеров https://github.com/ToniA/arduino-heatpumpir

Может ваш с ней заработает.


С телевизором проще, библиотека IRremote позволяет декодировать его команды и отправить их обратно. Пробовал, всё работает.


А вот для кондиционера она не совсем годится. У него слишком длинный пакет обычно. Библиотека больше 255 байт не может принять.

показать ответы
0
Автор поста оценил этот комментарий

День добрый. Как человек, который имеет опыт работы с семейством плат Ардуино, скажите - насколько реально собрать модулятор голоса в режиме реального времени с опцией переключения эффектов на подобной плате?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Добрый вечер. Всё реально в теории. С дополнительными микросхемами, как в этом проекте https://github.com/andygrove/ultimate_voice_changer

В ардуино мало ресурсов, не самый лучший и быстрый АЦП. ЦАП отсутствует. Требуется отдельная микросхема. Лучше подобное собирать на STM32.

По ссылке выше есть даже плата готовая. Попробуйте собрать её. 

показать ответы