Arduino, датчик движения и релейный модуль

Как-то решил создать автоматическое освещение в туалете, надоело постоянно включать/выключать свет.

Что нам для этого понадобится?

  • Arduino (используется в качестве программатора ASP).
  • Релейный модуль.
  • Датчик движения.
  • Микроконтроллер ATtiny13.
  • Сразу хочу пояснить, датчик движения используется HC-SR501. Сам по себе он представляет законченное устройство, которое на выходе выдает логическую единицу если кто-то движется и ноль если движения нет. У себя на плате датчик имеет два переменных резистора: один регулирует частоту срабатывания а другой дальность срабатывания.На рисунке 1 показан сам датчик.


    Рисунок 1 — Внешний вид датчика HC-SR50.

    Режим работы
    Режим работы модуля задается перемычкой.
    Всего два режима — режим H и режим L. Выбирается перемычкой.

    Режим H — в этом режиме при срабатывании датчика несколько раз подряд на его выходе (OUT) остается высокий логический уровень.
    Режим L — в этом режиме на выходе при каждом срабатывании датчика появляется отдельный импульс.

    Правда на моей версии датчика перемычка припаяна не была, а место под нее было рисунок 2.


    Рисунок 2 — Вид сзади датчика движения, красным цветом показано где должна быть перемычка.

    Технические характеристики
    Напряжение питания: 4,5В — 20В
    Ток потребления: <60uA
    Напряжение на выходе Высокие и низкие уровни в 3.3V TTL логике
    Дистанция обнаружения: 3 — 7м (регулируется)
    Угол детектирования: 120°-140°
    Длительность импульса при обнаружении: 5 — 200сек. (регулируется)
    Время блокировки до следующего замера: 2,5сек.
    Рабочая температура: -20 — +80°C
    Режим работы: L — одиночный захват, H — повторяемые измерения.

    Датчик можно было использовать сам по себе, но для последующего ему нужно около 3-4 секунд для «отдыха» т.е если я нахожусь в помещении то мне придется ждать пока он подумает и сработает. Для того что-бы убрать этот недостаток я решил использовать в связке с датчиком МК ATtina13a.

    Как прошить микроконтроллер?

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

    Прошиваем Attiny13 с помощью Ардуино.

    Правда когда я заменил файлы в папке hardware, у меня в среде разработки ардуино в разделе Сервис -> Плата пропали все платы и появились микроконтроллеры. И когда я попытался запрограммировать у меня среда начала ругаться. Тогда я решил залить прошивку в МК при помощи программы  AVR Burn-O-Mat т.к. у нее графический удобный интерфейс.

    Как прошить мк при помощи AVR Burn-O-Mat читаем тут.

    Как получить .hex файл из Ардуино читаем тут

    При срабатывании датчика движения будет подаваться единица на релейный модуль который будет включать свет, на рисунке 3 сам модуль.


    Рисунок 3 — Релейный модуль

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

    Код программы:

    int led = 3;
    int sensor = 4;

    // the setup routine runs once when you press reset:
    void setup() {
    // initialize the digital pin as an output.
    pinMode(led, OUTPUT);
    pinMode(sensor, INPUT);
    }

    // the loop routine runs over and over again forever:
    void loop() {
    digitalWrite(led, LOW);
    if (digitalRead(sensor)) {
    digitalWrite(led, HIGH);
    delay(30000);
    if (digitalRead(sensor)) {
    digitalWrite(led, HIGH);
    delay(15000);
    }
    delay(10000);
    }
    else
    digitalWrite(led, LOW);
    }

    Путем регулировки переменным резистором времени срабатывания можно добиться такого состояния когда время опроса датчика движения не будет совпадать с временем простоя датчика.

    Ниже привожу фотки устройства.

    Эксперименты со светодиодом:

    Подключил релейный модуль:

    Прикрепленные файлы:

    Добавить комментарий

    Ваш адрес email не будет опубликован.