Форум программистов, компьютерный форум, киберфорум
Hadros
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Arduino. Вытяжка на кухню для семьи с курящим родителем.

Запись от Hadros размещена 21.06.2023 в 13:41
Показов 1870 Комментарии 3

Один родитель курит на кухне. Балкона нет. Есть самодельная вытяжка от 12 Вольт. Тянет хорошо, но шумновато и нет необходимости крутить её постоянно. И ещё, не хочется, чтобы соседи начали жаловаться на плохую тягу их своей кухни. Курение "в форточку" не приветствуется курящим родителем. Кухня на время курения закрывается и держится закрытой, пока не выветрится дым. Снаружи кухни непонятно, уже выветрилось или нет. Даже недолгое открывание кухни сразу после курения позволяет дыму просочится в центр квартиры. Есть дети, которым иногда тоже хочется что-то взять на кухне. Есть кошка, способная при неплотном закрытии сама открыть кухонную дверь. И вот, такое решение было выбрано:

Нажмите на изображение для увеличения
Название: IMG_20230621_121936.jpg
Просмотров: 232
Размер:	61.5 Кб
ID:	8113

Вначале курения человек нажимает кнопку с фиксацией. Вытяжка включается и одновременно подаётся питание 12 В на лампочку, расположенную снаружи кухни. С этого же провода через понижающий преобразователь 12 В -> 3 В берётся питание на оконную сигнализацию. Она прикреплена к дверному косяку а магнит к кухонной двери. Понижайка поместилась внутри сигнализации в отсек для батареек. Для уменьшения громкости выходные отверстия сигнализации залиты горячим клеем. После курения кнопку следует нажать повторно (чтобы она отжалась) и пойдёт обратный отсчёт до перехода в ждущий режим. На это время работа вытяжки и сигнализации не прекращается. Зато, можно спокойно уходить. Если кошка откроет дверь раньше времени, раздастся звуковая сигнализация. Дети, увидев красную лампочку на входе, поймут, что там плохо пахнет и не станут лишний раз заходить, пока лампочка не погаснет.

Нажмите на изображение для увеличения
Название: IMG_20230621_132640.jpg
Просмотров: 259
Размер:	117.4 Кб
ID:	8114

На момент начала работы над устройством у меня не было достаточно мощного блока питания на 12 Вольт в отдельном корпусе, но был бескорпусный на два настоящих Ампера. Он занял 35% от объёма распаечной коробки. Так-что наружу идёт только провод к розетке. Если бы использовать только одну вытяжку, то хватило бы и обычного внешнего БП с китайскими "2 A". И места внутри стало бы значительно больше. Сейчас всё впритык. Для включения вентиляторов и сигнализации используется модуль ULN2003A. С дополнительно наклеенным радиатором. С запараллеленными входами микросхемы 1 и 7, 2 и 6, 3 и 5. И соответственно запараллеленными выходами. Вход (и соответствующий выход) 4 ни с чем не запараллелен, сигнализации в ванной нет. Во время тестирования у меня несколько раз сгорала микросхема ULN2003A. Сейчас в модуль впихнута "TOSHIBA ULN2803APG" так же, с радиатором. Выводов у неё больше, но в модуль влазит нормально.

Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 219
Размер:	643.1 Кб
ID:	8116

Сверху на выходах из распаечной коробки стоят электролитические конденсаторы и параллельно им диоды в обратной полярности. Сама Ардуина питается от блока питания. Дисплеям нужно 5 Вольт. Для этого используется маломощный линейный стабилизатор LM7805, припаянный к одному из потенциометров. Эти 5 Вольт идут также и на потенциометры.

Нажмите на изображение для увеличения
Название: IMG_20230621_132654.jpg
Просмотров: 230
Размер:	123.4 Кб
ID:	8115

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
#define TimerMS 600000ul              // время работы вытяжки до перехода в дежурный режим в миллисекундах
 
#define PIN_DefaultSpeed01 A1         // пин средней точки потенциометра для регулировки скорости в дежурном режиме
#define PIN_Vent01 9                  // пин выдачи ШИМ-сигнала на драйвер вентилятора !!! при изменении номера этого пина нужно менять TCCR1A и TCCR1B в setup() !!!
#define PIN_Siren01 3                 // пин выдачи сигнала на включение оповещающего устройства при включении вытяжки
#define PIN_Button01 8                // пин кнопки включения вытяжки
#define PIN_Disp01_CLK 4              // пин CLK для дисплея
#define PIN_Disp01_DIO 5              // пин DIO для дисплея
 
#define PIN_DefaultSpeed02 A2         // см. выше
#define PIN_Vent02 10                 // см. выше
#define PIN_Siren02 11                // см. выше
#define PIN_Button02 12               // см. выше
#define PIN_Disp02_CLK 6              // см. выше
#define PIN_Disp02_DIO 7              // см. выше
 
#include "GyverTM1637.h"              // подключение библиотеки для работы с дисплеями
 
class MyLine {
  public:
    MyLine(byte _ds, byte _vn, byte _sr, byte _bt, byte _clk, byte _dio) {
      DefaultSpeedPin = _ds;
      VentPin = _vn;
      SirenPin = _sr;
      ButtonPin = _bt;
      CLKPin = _clk;
      DIOPin = _dio;
      pinMode(DefaultSpeedPin, INPUT);
      pinMode(VentPin, OUTPUT);
      pinMode(SirenPin, OUTPUT);
      pinMode(ButtonPin, INPUT_PULLUP);
      DSP = new GyverTM1637 (CLKPin, DIOPin);
      DSP->clear();
      DSP->point(0);
      DSP->brightness(7);
      DSP->displayByte(_L, _O, _A, _D);
    };
    byte StopCount();
    byte StartFull();
    byte StartCount();
  private:
    GyverTM1637 * DSP;
    byte DefaultSpeedPin;
    byte VentPin;
    byte SirenPin;
    byte ButtonPin;
    byte CLKPin;
    byte DIOPin;
    word CurSpeed, OldSpeed;
    bool ModeChanged = true;
    unsigned long StartCountTime, EndCountTime;
    word CurTime, OldTime;
};
 
MyLine Line01(PIN_DefaultSpeed01, PIN_Vent01, PIN_Siren01, PIN_Button01, PIN_Disp01_CLK, PIN_Disp01_DIO); // основная вытяжка (у меня с подключенной световой и звуковой сигнализацией)
MyLine Line02(PIN_DefaultSpeed02, PIN_Vent02, PIN_Siren02, PIN_Button02, PIN_Disp02_CLK, PIN_Disp02_DIO); // дополнительная вытяжка (у меня это вытяжка в ванной комнате без сигнализации, только вентилятор)
 
void setup() {
  // Пины D9 и D10 - 31.4 кГц
  TCCR1A = 0b00000001;  // 8bit
  TCCR1B = 0b00000001;  // x1 phase correct
}
 
byte Mode01 = 0, Mode02 = 0;    // начальный режим работы вытяжек
 
void loop() {
  switch (Mode01) {
    case 0:
      Mode01 = Line01.StopCount();
      break;
    case 1:
      Mode01 = Line01.StartFull();
      break;
    case 2:
      Mode01 = Line01.StartCount();
      break;
  }
  switch (Mode02) {
    case 0:
      Mode02 = Line02.StopCount();
      break;
    case 1:
      Mode02 = Line02.StartFull();
      break;
    case 2:
      Mode02 = Line02.StartCount();
      break;
  }
};
 
byte MyLine::StopCount() {        // дежурный режим: скорость задаётся потенциометром, сигнализация выключена
  byte ret = 0;
  long s = 0;
  if (ModeChanged) {
    DSP->point(0);
    DSP->clear();
    digitalWrite(VentPin, LOW);
    digitalWrite(SirenPin, LOW);
    OldSpeed = 300;
    ModeChanged = false;
  }
  for (byte h = 1; h <= 32; h++) s += analogRead(DefaultSpeedPin);
  s /= 32;
  analogWrite(VentPin, (s / 16));
  CurSpeed = (s / 16);
  if (OldSpeed != CurSpeed) {
    if (CurSpeed > 0) DSP->displayInt(CurSpeed);
    else DSP->displayByte(_O, _F, _F, _empty);
    OldSpeed = CurSpeed;
  };
  if (!digitalRead(ButtonPin)) {
    ret = 1;
    ModeChanged = true;
  }
  return ret;
};
 
byte MyLine::StartFull() {      // включение вытяжки: максимальная скорость, сигнализация включена
  byte ret = 1;
  if (ModeChanged) {
    DSP->point(0);
    DSP->displayByte(_F, _U, _L, _L);
    ModeChanged = false;
  }
  digitalWrite(VentPin, HIGH);
  digitalWrite(SirenPin, HIGH);
  if (digitalRead(ButtonPin)) {
    ret = 2;
    ModeChanged = true;
  }
  return ret;
};
 
byte MyLine::StartCount() {     // отсчёт времени до автоматического выключения после отжатия кнопки: максимальная скорость, сигнализация включена
  byte ret = 2;
  unsigned long n, os, m, s;
  if (ModeChanged) {
    DSP->point(1);
    DSP->displayInt(TimerMS / 1000);
    OldTime = 9999;
    StartCountTime = millis();
    EndCountTime = StartCountTime + TimerMS;
    ModeChanged = false;
  }
  n = millis();
  os = ((EndCountTime - n) / 1000ul);
  m = (os / 60ul);
  s = (os % 60ul);
  CurTime = ((m * 100) + s);
  if (OldTime != CurTime) {
    DSP->displayClock(m, s);
    OldTime = CurTime;
  }
  if (n > EndCountTime) {
    ret = 0;
    ModeChanged = true;
  }
  if (!digitalRead(ButtonPin)) {
    ret = 1;
    ModeChanged = true;
  }
  return ret;
};
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 3
Комментарии
  1. Старый комментарий
    Аватар для Аватар
    а не курить в квартире или вообще бросить родителю ни как?
    Запись от Аватар размещена 23.06.2023 в 09:40 Аватар вне форума
  2. Старый комментарий
    Аватар для Hadros
    Цитата Сообщение от Аватар
    а не курить в квартире или вообще бросить родителю ни как?
    Курение само по себе не является рассматриваемой тут проблемой. Дано: курение + обычная работающая мощная вытяжка, пускай даже с кнопкой вкл/выкл. Показаны, варианты устранения недостатков обычной вытяжки.
    Запись от Hadros размещена 23.06.2023 в 09:56 Hadros вне форума
  3. Старый комментарий
    Странно, обычно используется туалет для этого. Уж где-где, а там никто благоуханий не ожидает. Мой отец на кухне не курил. Тогда правда не было ардуин всяких, но тем не менее. К тому-же если датчик поставить ещё и на другие вещества, то в принципе такая вытяжка будет работать на всех, а не только на такого курящего родителя.
    Запись от Hrethgir размещена 23.06.2023 в 21:45 Hrethgir вне форума
 
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru