»»

Управляем вытяжкой на кухне пультом от телевизора на Arduino

2016-02-14 в 22:56

А между тем как мы ожидаем доставки всех компонентов для следующей версией нашей уже Не метеостанции, а больше системы умного... дома, появилась необходимость собрать устройство которое позволит управлять вытяжкой на кухне с помощью пульта дистанционного управления от телевизора. Все будет построено на базе платформы Arduino.
В целях минимизации всего устройства, решил использовать версию Arduino Nano.

Вот схема нашего устройства.

схема подключения ик приемника и реле к ардуино

Использование пульта от телевизора оправдано тем, что приобретать отдельный пульт для управления вытяжкой чтобы еще и место на столе занимал не правильно. Все это аккуратно размещаем в корпусе как вам нравится. ИК применик я использовал первый который попался на глаза и который давно-давно снял скорее всего со старого видеомагнитофона.
Теперь о принципе работы. Моя вытяжка работает в двух режимах. Первый - минимальные обороты двигателя и второй режим с максимальными оборотами. Третьим положением переключателя является отключение двух режимов.
В программе применены те же принципы. Только в целях понижения потребления электроэнергии, была добавлена функция автоматического отключения после 20 минут работы. Вообще, весь этот проект и был задуман с целью экономии, так как человеку свойственно забывать. И вытяжка на кухне не является исключением.
И так. Вот как программа будет работать, используя функции режимов на Arduino (Вспомнился проект полицейского маяка). Нажали на кнопку (прошу заметить, работаем только с одной кнопкой на пульте что по моему мнению более удобно) один раз - включился минимальный режим работы двигателя, нажали еще раз - включился второй режим, и нажали третий раз выключили вытяжку (нулевой режим в коде). При работе на первом или втором режиме более 20 минут (в программе сами поменяете это время сколько вам нужно) программа автоматически перейдет к нулевому режиму.

Но чтобы управлять всей системой нам нужно узнать код, который запрограммирован в пульте на выбранную вами кнопку. У себя я выбрал не используемую кнопку и такую, которая никак не подействует на телевизор. Что бы узнать этот код предлагаю для начала при той же схеме загрузить в Arduino следующую программу.

Код

#include <IRremote.h>

int RECV_PIN = 2;

IRrecv irrecv(RECV_PIN); //Создаем объект получения сигнала с определнного порта

decode_results results; //Переменная, хранящая результат

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Начинаем прием
}

void loop() {
  if (irrecv.decode(&results)) //При получении сигнала...
  {
    Serial.println(results.value); //…выводим его значение в последовательный порт
    irrecv.resume(); // Получаем следующее значение
  }
}

После загрузки открываем "Монитор последовательного порта" в программе Arduino. Как мы нажмем нужную нам кнопку на пульте мы увидим код этой самой кнопки.

считывание кода пульта

Обратите внимание, некоторые "умные" пульты могут отправлять разный код при кратковременном нажатии и удержании. Выбрали код, скопировали его.
Теперь код самой главной программы. Предлагаю разобрать его по частям для Вашего удобства.
Сюда пишем время для таймера автоматического отключения. Для того чтобы Вы убедились в его работоспособности, установил таймер на 10 секунд.

Код
#define INTERVAL 10000UL // таймер автоматического отключения

Здесь, в нужное место вставляем код который мы узнали предыдущей прошивкой.

Код
if (results.value == нужное-место)

Количество режимов Arduino. В данной прошивке их будет 3. Если Вам необходимо больше или меньше, меняйте на свое число.

Код
regim = ++regim % 3;

Ну вот основное рассказал. Теперь пришла очередь предоставить весь код прошивки.

Код

#include <IRremote.h>
int RECV_PIN = 2; // пин ик приемника
int VentMin = 5; // пин для минимального режима вытяжки
int VentMax = 6; // пин для максимального режима вытяжки
int regim = 0;

IRrecv irrecv(RECV_PIN);
decode_results results;
#define INTERVAL 1800000UL // таймер автоматического отключения
unsigned long previousMillis;

void setup()
{
  irrecv.enableIRIn(); // Запуск приемника
  pinMode(VentMin, OUTPUT);
  pinMode(VentMax, OUTPUT);
  setMode(regim);
}

void loop() {
  if (irrecv.decode(&results)) {
    if (results.value == 19613) {
      regim = ++regim % 3; // Количество режимов. В данной прошивке их будет 3
      previousMillis = millis();
      setMode(regim);
    }
    delay(500);
    irrecv.resume(); //ожидаем следующий код
  }

  if (millis() - previousMillis > INTERVAL) {
    setMode(regim = 0);
    previousMillis = millis();
  }
}

void setMode(int regim) {
  switch (regim) {
    case 0:
      digitalWrite(VentMin, HIGH);
      digitalWrite(VentMax, HIGH);
      break;
    case 1:
      digitalWrite(VentMin, LOW);
      digitalWrite(VentMax, HIGH);
      break;
    case 2:
      digitalWrite(VentMin, HIGH);
      digitalWrite(VentMax, LOW);
      break;
    default:
      break;
  }
}

UPD 28.02.16
Ну вот дошли руки до установки. Весь день ушел на это дело.
Небольшой фотоотчет и видео работы.

Такая коммутировал проводки.

вытяжка на Arduino

Таким образом подключил реле

реле управления вытяжки Arduino

Над вытяжкой имеется шкафчик где и находится вся электроника.

автоматика вытяжки на кухне

Там три провода, идут к ик приемнику.

ардуино вытяжка

Вывел провода в шкафчик.

проводка ардуино вытяжки

А так разместил ик приемник для уверенного приема.

ик приемник ардуино вытяжки

Не забудьте загрузить и установить библиотеку для работы с ИК приемниками. Загрузить.
В этот раз очень много текста, хотелось очень подробно все рассказать.
Свои вопросы задавайте в комментарии либо на форум.

Список электронных компонентов.

Наименование Тип Количество Магазин
Arduino Nano 1 Найти
Модуль реле 2 канала 1 Найти
Блок питания 9 В  1 А 1 Найти
ИК приемник Любой подходящий 1 -
Корпус Любой подходящий 1 -
Cashback на Aliexpress
Если Вы заметили ошибку, нажмите Ctrl+Enter и сообщите нам.
Оценка статьи: 5.0/5 Уже оценило 7
Всего комментариев: 0
Добавить комментарий

Вход на сайт

Яндекс.Метрика Рейтинг@Mail.ru Проверка орфографии