28 ноября 2016 г.
Textual description of firstImageUrl

Рукожопим датчик освещения базе Arduino Uno R3 MEGA328P и первая ошибка

Проектирую элемент "умного дома". На данный момент из элементов: датчика освещения, который возвращает лишь логический "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% «темно» или «светло». Это сделано во избежание случайных засветок (мимо проезжающая машина, облака, засветка от термоядерного взрыва…).
Библиотека приложена.

Далее совмещаем работу с датчиком движения.
Логика работы следующая: если в помещении «светло», то выключаем датчик движения и доп. освещение. Если в помещении «темно» и отсутствует движение, то доп. освещение выключено и если движение есть, то включаем доп. освещение.

Есть минусы данного алгоритма и датчиков:
  1. Датчики возвращают лишь логические «0» или «1», а значит количественно оценить данные с датчиков мы не можем
  2. В случае ручного включения основного освещения, система не отличит увеличения уровня освещения от основного источника света или естественного от дополнительного.
Если во втором случае мы можем дополнительно ввести датчик тока в цепь основного освещения или организовать разовую команду от выключателя до Arduino, то в первом случае мне необходимо менять датчики: датчик движения дополню ультразвуковым, а датчик освещения заменю на цифровой, т.е. я буду получать данные в люксах и получать количественную характеристику.

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

Скетч приложен, может кому пригодится

Итог

Библиотека для датчика освещенности
Обновленная библиотека для датчика движения (немного оптимизирован)
Скетч, где задействован и датчик освещенности и датчик движения