RDC1-0004, Управление вентиляцией

RDC1-0004, Управление вентиляцией
Только в рознице. Цена, возможность и сроки поставки потребуют уточнения
653.70 × = 653.70

Спецификация набора

То, что у вас уже есть, вы можете удалить в корзине.

НаименованиеЦенаКол-во
Печатная плата rdc1-0004, Печатная плата с разводкой, FR4 70х50мм (1.5мм, 18мкм) 160 1
ATTINY13A-PU, Микроконтроллер 8-Бит, picoPower, AVR, 20МГц, 1КБ Flash [DIP8] 55 1
LP2950CZ-3.3/NOPB, Регулятор с низким падением напряжения, 3.3В, 380мВ/100мА [TO92] 30 1
Конд.кер.диск. 0.1 мкФ х 50В,+80-20% 3 5
ECAP (К50-35), 10 мкФ, 50 В, 105°C, Конденсатор электролитический алюминиевый 4 2
ECAP (К50-35), 1000 мкФ, 35 В, 105°C, Конденсатор электролитический алюминиевый 18 1
CF-25 (С1-4) 0.25 Вт, 10 кОм, 5%, Резистор углеродистый 0.90 3
1N4007, Диод выпрямительный 1А 1000В [DO-41] 3 4
1N4148.133, Диод 150мА 100В [DO-35] 2 1
BSS138LT1G, Транзистор, N-канал 50В 220мА [SOT-23] 4 1
ТПК-2 (12В, 210мА) (ТПГ-2), Трансформатор герметичный (залитый), 12В, 210мА 220 1
L-3DP3C (L-32P3C), Фототранзистор d=3мм, Iтемн=100нА 11 1
PLD-6 (DS1021-2x3S), Вилка штыревая 2.54мм 2x3 прямая тип1 6 1
812H-1C-C (S) 12VDC, Реле 1пер. 12В / 7A, 250V 110 1

Описание

Обычно вентиляция в туалете или ванной комнате включается одновременно с включением света и выключается сразу после выключения света. Т.е. человек вошел вентилятор включился, вышел выключился. Сервис простой, но не очень логичный. А если вам нужно зайти на минутку, “по быстрому”? Что там вытягивать? Или наоборот застряли надолго. Вышли через несколько минут и вентилятор выключился. Никакой продувки. Атмосфера в помещении осталась, мягко говоря, не очень.

Более логичным был бы следующий сценарий: Зашел человек в санузел, пробыл там минуту другую, ничего не происходит, продувка не включается, сквозняка нет. Засел на несколько минут, вентилятор включился. Потом вышел, а вентилятор ещё некоторое время продолжает работать до полной очистки воздуха в маленьком помещении.

Предлагаем сделать простое электронное устройство, которое работает по описанному выше сценарию. Модуль подключается к сети 220В. Вентилятор подключается к модулю. Достаточно верным индикатором того, что человек зашел или покинул помещение, является факт изменения освещения. На это и реагирует наше устройство.

В коде программы вы можете самостоятельно задать временные интервалы включения и выключения вентиляции.

В строке

#define START_DELAY 180 //секунды

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

В строке
#define STOP_DELAY 120 //секунды
Задайте время работы вентилятора после включения. По умолчанию установлено 2 минуты. Причем это время вентилятор полюбому отработает после последнего выключения света. Т.е. после вашего посещения вентилятор включился, но кто-то вошел и вышел, а вентилятор засек этот момент и отсчет начался снова. Гарантированная продувка обеспечена.

Скетч. Код программы

#define      RELAY               3

#define      LIGHT_THRESHOLD     130

#define      START_DELAY         180 //секунды
#define      STOP_DELAY          120 //секунды


volatile unsigned int TimeCnt = 0; //счетчик секунд
volatile boolean CntOnFlag = false; //false - счетчик выключен, true - счетчик включен
volatile boolean CntPhaseFlag = true; //false - свет включен, ожидание включения вентилятора;
                                       //true - свет выключен, ожидание отключения вентилятора


void setup()
{ 
  //конфигурация вывода PB3
  DDRB = 1 << RELAY;
  PORTB &= ~(1 << RELAY);
  //PORTB |= (1 << RELAY);
  
  //конфигурация АЦП
  ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
  ADMUX = (1 << MUX1) | (1 << ADLAR); //ADC2
  ACSR = (1 << ACD);
  DIDR0 |= (1 << ADC2D);

  ADCSRA |= (1 << ADSC);
  while (ADCSRA & (1 << ADSC));

  ADCSRA |= (1 << ADIE);
  SREG |= 0x80;
  ADCSRA |= (1 << ADSC);
}
//------------------------------------------------------
void loop()
{ 
  
  if (CntOnFlag) //если стоит флаг включения счетчика
  {
    if (TimeCnt > 0) //если счетчик больше нуля
    {
      TimeCnt--; //уменьшение счетчика на единицу
    }

    else //иначе
    {
      CntOnFlag = false; //сброс флага включения счетчика

      if (CntPhaseFlag) //если было выключение света
        PORTB &= ~(1 << RELAY); //выключить реле
      else //иначе, т.е. было включение света
        PORTB |= (1 << RELAY); //включение реле
    }
  
    delay(1000);
  }
  
}
//------------------------------------------------------
ISR(ADC_vect)
{
  unsigned int ADCVal = ADCH * 7; //считывание показаний АЦП

  //если уровень освещенности больше заданного
  //и было выключение света
  if ((ADCVal >= LIGHT_THRESHOLD) && (CntPhaseFlag))
  {
    CntPhaseFlag = false; //сброс флага выключения света
    TimeCnt = START_DELAY; //счетчик равен времени задержки перед включением реле
    CntOnFlag = true; //установка флага включения счетчика
  }
  //иначе, если уровень освещенности меньше заданного,
  //и было отключение света
  else if ((ADCVal < LIGHT_THRESHOLD) && (!CntPhaseFlag))
  {
    CntPhaseFlag = true; //установка флага выключения света
    TimeCnt = STOP_DELAY; //счетчик равен времени, которое реле остается включенным после отключения света
    CntOnFlag = true;  //установка флага включения счетчика
  }

  ADCSRA |= (1 << ADSC);
}

Техническая документация

Видео

Комментарии