Проектирую элемент "умного дома". На данный момент из элементов: датчика освещения, который возвращает лишь логический "0" или "1" и датчика движения HC-SR501 базе Arduino Uno R3 MEGA328P. В предыдущем посте я разбирался с датчиком движения, сегодня мы составим алгоритм обработки данных с датчика освещенности.
Что такое Arduino
Прежде хочу рассказать что такое Arduino UNO, да и вообще что такое Arduino.
Arduino UNO это небольшая плата с процессором и памятью. Существует множество модификаций плат Ардуино, отличаются они количеством выводов, мощностью процессора, памятью, интерфесов и дополнительных фишек.
Приемуществом Arduino является предельная простота при проектировании своей системы. К системе Ардуино выпускается множество датчиков, переключателей и множество иных устройств.
Программы легки пишутся на "урезанном" C++ и довольно легки в освоении даже если вы с программированием не слишком знакомы.
Введение
Задача:- научиться работать с датчиком
- построить оптимальный алгоритм для анализа данных с датчика.
Безусловно вначале необходимо приобрести данные девайсы (ссылки выше) и конечно же проверить:
Начало работы
Для начала нам необходимо поставить соответствующее ПО (Arduino Software). Найти его можно здесь. Впоследствии, когда я делал библиотеку, я понял что это полная лажа и перешел на Arduino IDE, на чем я собственно пока и остановился.Собираем стенд для отладки
Алгоритм
Решение об уровне освещенности принимается на интервале 1 минута.
Минутный интервал разбит на 6 подинтервалов по 10 секунд.
На каждом подинтервале принимается решение об уровне освещенности, если уровень освещенности выше порога и по времени более 10%, то считается что «светло».
На 1 минутном интервале принимается решение только если 100% «темно» или «светло». Это сделано во избежание случайных засветок (мимо проезжающая машина, облака, засветка от термоядерного взрыва…).
Библиотека приложена.
Минутный интервал разбит на 6 подинтервалов по 10 секунд.
На каждом подинтервале принимается решение об уровне освещенности, если уровень освещенности выше порога и по времени более 10%, то считается что «светло».
На 1 минутном интервале принимается решение только если 100% «темно» или «светло». Это сделано во избежание случайных засветок (мимо проезжающая машина, облака, засветка от термоядерного взрыва…).
Библиотека приложена.
Далее совмещаем работу с датчиком движения.
Логика работы следующая: если в помещении «светло», то выключаем датчик движения и доп. освещение. Если в помещении «темно» и отсутствует движение, то доп. освещение выключено и если движение есть, то включаем доп. освещение.
Есть минусы данного алгоритма и датчиков:
Логика работы следующая: если в помещении «светло», то выключаем датчик движения и доп. освещение. Если в помещении «темно» и отсутствует движение, то доп. освещение выключено и если движение есть, то включаем доп. освещение.
Есть минусы данного алгоритма и датчиков:
- Датчики возвращают лишь логические «0» или «1», а значит количественно оценить данные с датчиков мы не можем
- В случае ручного включения основного освещения, система не отличит увеличения уровня освещения от основного источника света или естественного от дополнительного.
Моя ошибка заключается в том, что алгоритм работы я разрабатывал уже после закупки комплектующих по ходу макетирования. Требования нужно было выставлять к железу после, как результат потеря времени, деньги я вряд ли потерял, датчикам найду другое применение.
Скетч приложен, может кому пригодится
Итог
Библиотека для датчика освещенностиОбновленная библиотека для датчика движения (немного оптимизирован)
Скетч, где задействован и датчик освещенности и датчик движения