Свет в туалете

Тема в разделе "Arduino & Shields", создана пользователем light-winged, 13 май 2017.

  1. alp69

    alp69 Форумчанин

    Не, не сильно. ;)

    Упомянутый датчик движения (PIR) не нуждается в скетче. Все, что написано в скетче для него, в нем самом уже зашито.
    Нужно просто даташит на него внимательно прочесть.

    P.S. Разве что не у всех есть регулировка длительности удержания на выходе сигнала сработки.

    Но режим удержания есть практически у всех. Включается джампером.
     
    Последнее редактирование: 16 май 2017
  2. smile

    smile Нерд

    это то понятно, только регулировки удержания не хватит для долгих "заседаний", а махать руками сидя на горшке, чтобы свет не погас - как-то не айс...
     
  3. DetSimen

    DetSimen Guest

    Ультразвуковой даччик, установленный на стену за бачком спасёть отца русской демократии от махания руками во время столь важного дела.
     
    Andrey12 нравится это.
  4. smile

    smile Нерд

    ну да, к этому вроде и пришли, но в получается, что в идеале нужно всё же ставить и PIR (или геркон) совместно с ультразвуковым датчиком, что бы свет включался при открывании двери, а не только после того, как кто-то сел на белый трон...

    Или ещё как вариант, настроить ультразвуковой так, что бы свет горел при расстоянии меньше 70см и больше 110-150см, тогда при закрытой двери (дистанция до двери 100-140см) свет не горит, открываем дверь - дистанция увеличивается, свет включается, заходим, садимся - дистанция меньше 70см, свет опять таки горит по первому условию...

    Нужно пробовать )))
     
    Cynep, Andrey12 и mcureenab нравится это.
  5. DetSimen

    DetSimen Guest

    Не намного, ибо за дверью кто-то стоит. PIR все же нужен, он даст команду включить свет и всё. А выключить свет даст команду УЗ датчик, через, допустим, полминуты, когда перед ним никого не будет.
     
  6. smile

    smile Нерд

    точность УЗ датчика в миллиметрах измеряется, так что опытным путем можно подобрать дистанцию на пределе, но это просто мысли в слух, нужно пробовать, а PIR, как я писал выше, в идеале ТОЖЕ нужно ставить.
     
  7. mcureenab

    mcureenab Гуру

    ИК ворота не подойдут?
    На дверь зеркало. Луч от зеркала отражается в ИК приемник.
    Дверь открываем, луч уходит. Есть срабатывание. Свет включили. Зашли - перекрыли луч телом. Занято. Вышли, дверь закрыли. Луч снова через зеркало светит в датчик. Свободно.

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

    smile Нерд

    имхо сложнее в установке и настройке, да и кошка есть, для которой дверь всегда слегка приоткрыта...
    Но это уже тонкости. Несколько хороших вариантов уже предложено, осталось испробовать )
     
  9. Hans667

    Hans667 Нуб

    Ребят , а помогите со скетчем: как добавить проверку на четность/нечетность?
    хочу управление сделать только герконом, без датчиков всяких
     
    Последнее редактирование: 18 янв 2019
  10. Tomasina

    Tomasina Сушитель лампочек Модератор

     
  11. Hans667

    Hans667 Нуб

    а скетчем?)))) на основе предыдущих?


    /*
    Автоматическое управление освещением на Ардуино в туалете
    Датчики: геркон
    */
    int switchPin = 3; // к выводу 3 подключён геркон
    int ledPin = 7; // к пину 7 подключёны светодиодные ленты

    void setup() {
    pinMode(switchPin, INPUT); // задаём вывод 7 в качестве входа (будем считывать с него)
    digitalWrite(switchPin, HIGH); // активируем внутренний подтягивающий резистор вывода
    pinMode(ledPin, OUTPUT); // задаём вывод 7 в качестве выхода
    Serial.begin(9600); // задействуем последовательный порт
    }

    void loop() {
    int g = digitalRead(switchPin); // считываем показания с геркона
    digitalWrite(ledPin, !g); // инвертированные показания записываем в порт со светодиодом
    Serial.println(g); // посылаем в последовательный порт значения с геркона
    //когда геркон замкнут, значение "0" (LOW), когда разомкнут - "1" (HIGH)
    delay(20); // повторяем цикл через 20 мсек
    }
     
  12. Tomasina

    Tomasina Сушитель лампочек Модератор

    А зачем тут проверка на четность?
    И приведите код в нормальнй вид (9-я кнопка в редакторе).
     
  13. Hans667

    Hans667 Нуб

    я хочу управлять только дверью:открыл-закрыл-свет горит,открыл-закрыл-свет погас.
     
  14. Tomasina

    Tomasina Сушитель лампочек Модератор

    Четность не гарантирует корректность срабатывания света ;)
    Я уже придумал два способа обмануть систему :D

    Это же тупо - получается, надо входить в темное помещение? Свет включается только при закрытии двери.
     
  15. Hans667

    Hans667 Нуб

    нет, открыл-загорелся,закрыл-горит..
     
  16. Tomasina

    Tomasina Сушитель лампочек Модератор

    Написано же: "открыл-закрыл-свет горит".
     
  17. Tomasina

    Tomasina Сушитель лампочек Модератор

    Вживую не проверял, лень схему собирать.
    Код (C++):
    #define OPEN  1
    #define CLOSE 0
    #define ON    1
    #define OFF   0

    byte switchPin = 3;
    byte ledPin = 7;

    boolean doorState;     // текущее состояние двери
    boolean oldDoorState;  // предыдущее состояние двери
    boolean ledState;      // текущее состояние света
    byte counter = 0;      // счетчик количества облегчившихся


    void setup()
    {
      pinMode(switchPin, INPUT_PULLUP);
      pinMode(ledPin, OUTPUT);
      Serial.begin(9600);
      infoSerial();                          // выводим отчет о произошедшей ситуации
    }


    void loop()
    {
      doorState = !digitalRead(switchPin);  // проверяем состояние двери
      ledState = digitalRead(ledPin);       // проверяем состояние света

      if (doorState != oldDoorState)        // если состояние двери изменилось (по сравнению с предыдущей проверкой)
      {
        if (doorState == OPEN && ledState == OFF) // если дверь открыли и свет не горит, значит тело входит
        {
          digitalWrite(ledPin, ON);               // включаем свет
        }

        if (doorState == CLOSE && ledState == ON) // если дверь закрыли и свет горит, значит тело вошло
        {
          counter++;                              // увеличиваем счетчик
        }

        if (doorState == OPEN && ledState == ON)  // если дверь открыли и свет горит, значит тело выходит
        {
          // включаем вытяжку, которая по таймауту выключится через 10 минут (домашнее задание)
        }

        if (doorState == CLOSE && ledState == OFF) // если дверь закрыли и свет не горит, значит тело вышло
        {
          digitalWrite(ledPin, OFF);              // выключаем свет
        }

        infoSerial();                             // выводим отчет о произошедшей ситуации
        oldDoorState = doorState;                 // запоминаем состояние двери
      }
    }


    void infoSerial()
    {
      Serial.print("\nDoor: ");
      Serial.print(doorState ? "Open" : "Close");

      Serial.print("\tLight: ");
      Serial.print(ledState ? "On" : "Off");

      Serial.print("\tCounter: ");
      Serial.print(counter);
    }
     
    Сусемьбек нравится это.
  18. parovoZZ

    parovoZZ Гуру

    бред. МК здесь зачем? Реализуется на кнопочном выключателе с фиксацией.
     
  19. Tomasina

    Tomasina Сушитель лампочек Модератор

    Так неинтересно.
     
  20. parovoZZ

    parovoZZ Гуру

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