Самодельная автоматическая вытяжка с регулировкой оборотов на arduino.

olegoriy
Offline
Зарегистрирован: 08.02.2015

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

Задумал сделать вытяжку в ванной с применением ардуины, но что бы было интересней добавил к часто повторяемым проектам, регулировку скорости вентилятора 220 вольт.

https://www.youtube.com/watch?v=zRnoZTSYxf4

Не ругайтесь пожалуйста что нет схемы. Рисовать схемы для меня просто ад!! Но если кому то ну прям очень нужно, то пишите я заморочусь.

001#include <iarduino_DHT.h>              // подключаем библиотеку для работы с датчиком DHT
002iarduino_DHT sensor(12);               // подключаем DHT датчик на 12 пин
003#define dimPin 3                       // пин оптопары затвора симистора
004#define zeroPin 2                      // пин оптопары определяющию зиро крос
005#include <CyberLib.h>                  // шустрая библиотека для таймера
006volatile int tic, Dimmer;              // вводим переменную диммер  
007#define knopka1 10                     // Кнопка скорости
008#define knopka2 11                     // Кнопка режима
009#define NOGA1 4                        // Ноги экрана
010#define NOGA2 7
011#define NOGA3 8
012#define NOGA4 A0
013#define NOGA5 13
014#define NOGAa 5
015#define NOGAb 9
016#define NOGAc A2
017#define NOGAd A4
018#define NOGAe A5
019#define NOGAf 6
020#define NOGAg A1
021#define NOGAt A3
022 
023 
024long p = 0;                    //  переменная Для работы со временем опроса датчика DHT
025long i = 5000;                //  переменная Для работы со временем опроса датчика DHT
026long p1 = 0;                 //  переменная Для работы со временем нажатия кнопок
027long i1 = 200;              //  переменная Для работы со временем нажатия кнопок
028 
029 
030int SH1 = 0;                 // переменная для работы с экраном
031int SH2 = 0;                 // переменная для работы с экраном
032int SH3 = 13;                // переменная для работы с экраном
033int Z = 0;                   // переменная режима работы SPEED-humidity
034int Y = 4;                   // переменная режима скорость 
035int h =0;                    // пока не опросили датчик DHT влажность равна 0        
036 
037byte numberSegments[15] = {                                                        // масив для цифр экрана
038  0b00111111, 0b00000110, 0b01011011, 0b01001111, 0b01100110, 0b01101101,
039  0b01111101, 0b00000111, 0b01111111, 0b01101111, 0b00000000, 0b11100011,
040  0b11011100, 0b01101101, 0b01110110
041};
042 
043 
044  
045void setup()
046{
047  pinMode(dimPin, OUTPUT);
048  digitalWrite(dimPin, 0);
049  pinMode(zeroPin, INPUT);                 // настраиваем порт на вход для отслеживания прохождения сигнала через ноль
050  attachInterrupt(0, detect_up, FALLING);  // настроить срабатывание прерывания interrupt0 на pin 2 на низкий уровень
051  StartTimer1(timer_interrupt, 40);        // время для одного разряда ШИМ
052  StopTimer1(); 
053   
054  pinMode(knopka1, INPUT);
055  pinMode(knopka2, INPUT);
056  pinMode(NOGA1, OUTPUT);
057  pinMode(NOGA2, OUTPUT);
058  pinMode(NOGA3, OUTPUT);
059  pinMode(NOGA4, OUTPUT);
060  pinMode(NOGA5, OUTPUT);
061  pinMode(NOGAa, OUTPUT);
062  pinMode(NOGAb, OUTPUT);
063  pinMode(NOGAc, OUTPUT);
064  pinMode(NOGAd, OUTPUT);
065  pinMode(NOGAe, OUTPUT);
066  pinMode(NOGAf, OUTPUT);
067  pinMode(NOGAg, OUTPUT);
068  pinMode(NOGAt, OUTPUT);
069 }
070  
071void loop()
072{
073  unsigned long r = millis();
074  if(r - p > i & Z == 1){
075  switch(sensor.read()){                  // читаем показания датчика
076  case DHT_OK:h = sensor.hum;  break;}
077   p = r;}
078   
079   
080  if (!digitalRead(knopka1)) {            // изменяем скорость         
081  if(r - p1 > i1){
082    Y = Y + 1;
083    if(Y > 4) Y = 0;
084  p1 = r;
085  }}
086 
087  if (!digitalRead(knopka2)) {            // изменяем режим      
088  if(r - p1 > i1){
089    Z=!Z;
090  p1 = r;
091  }}
092 
093   
094  if( Z == 0){                                 // режимы скорости
095    SH3 = 13;
096    if(Y == 0){ SH1 = 0;SH2 = 0; Dimmer = 255;}
097    if(Y == 1){ SH1 = 2;SH2 = 5; Dimmer = 140;}
098    if(Y == 2){ SH1 = 5;SH2 = 0; Dimmer = 120;}
099    if(Y == 3){ SH1 = 7;SH2 = 5; Dimmer = 100;}
100    if(Y == 4){ SH1 = 9;SH2 = 9; Dimmer = 10;}                        
101  }
102 
103  if( Z == 1){                                // режим скорость от влажности
104     SH3 = 14;
105     SH1 = h/10;
106     SH2 = h - (SH1*10) ;
107     if(h < 50){Dimmer = 255;}
108     if(h > 50 & h < 60){Dimmer = 140;}
109     if(h > 60 & h < 70){Dimmer = 120;}
110     if(h > 70 & h < 80){Dimmer = 100;}
111     if(h > 80){Dimmer = 10;}                     
112  }
113   
114  digitalWrite(NOGA1, LOW);                 // выводим значения на экран                     
115  digitalWrite(NOGA2, HIGH);
116  digitalWrite(NOGA3, HIGH);
117  digitalWrite(NOGA4, HIGH);
118  digitalWrite(NOGA5, HIGH);
119   
120  digitalWrite(NOGAa, bitRead(numberSegments[SH1], 0));
121  digitalWrite(NOGAb, bitRead(numberSegments[SH1], 1));
122  digitalWrite(NOGAc, bitRead(numberSegments[SH1], 2));
123  digitalWrite(NOGAd, bitRead(numberSegments[SH1], 3));
124  digitalWrite(NOGAe, bitRead(numberSegments[SH1], 4));
125  digitalWrite(NOGAf, bitRead(numberSegments[SH1], 5));
126  digitalWrite(NOGAg, bitRead(numberSegments[SH1], 6));
127  digitalWrite(NOGAt, bitRead(numberSegments[SH1], 7));
128   
129  digitalWrite(NOGAa, bitRead(numberSegments[10], 0));
130  digitalWrite(NOGAb, bitRead(numberSegments[10], 1));
131  digitalWrite(NOGAc, bitRead(numberSegments[10], 2));
132  digitalWrite(NOGAd, bitRead(numberSegments[10], 3));
133  digitalWrite(NOGAe, bitRead(numberSegments[10], 4));
134  digitalWrite(NOGAf, bitRead(numberSegments[10], 5));
135  digitalWrite(NOGAg, bitRead(numberSegments[10], 6));
136  digitalWrite(NOGAt, bitRead(numberSegments[10], 7));
137 
138  digitalWrite(NOGA1, HIGH);
139  digitalWrite(NOGA2, LOW);
140  digitalWrite(NOGA3, HIGH);
141  digitalWrite(NOGA4, HIGH);
142  digitalWrite(NOGA5, HIGH);
143   
144  digitalWrite(NOGAa, bitRead(numberSegments[SH2], 0));
145  digitalWrite(NOGAb, bitRead(numberSegments[SH2], 1));
146  digitalWrite(NOGAc, bitRead(numberSegments[SH2], 2));
147  digitalWrite(NOGAd, bitRead(numberSegments[SH2], 3));
148  digitalWrite(NOGAe, bitRead(numberSegments[SH2], 4));
149  digitalWrite(NOGAf, bitRead(numberSegments[SH2], 5));
150  digitalWrite(NOGAg, bitRead(numberSegments[SH2], 6));
151  digitalWrite(NOGAt, bitRead(numberSegments[SH2], 7));
152   
153  digitalWrite(NOGAa, bitRead(numberSegments[10], 0));
154  digitalWrite(NOGAb, bitRead(numberSegments[10], 1));
155  digitalWrite(NOGAc, bitRead(numberSegments[10], 2));
156  digitalWrite(NOGAd, bitRead(numberSegments[10], 3));
157  digitalWrite(NOGAe, bitRead(numberSegments[10], 4));
158  digitalWrite(NOGAf, bitRead(numberSegments[10], 5));
159  digitalWrite(NOGAg, bitRead(numberSegments[10], 6));
160  digitalWrite(NOGAt, bitRead(numberSegments[10], 7));
161 
162  digitalWrite(NOGA1, HIGH);
163  digitalWrite(NOGA2, HIGH);
164  digitalWrite(NOGA3, LOW);
165  digitalWrite(NOGA4, HIGH);
166  digitalWrite(NOGA5, HIGH);
167   
168  digitalWrite(NOGAa, bitRead(numberSegments[11], 0));
169  digitalWrite(NOGAb, bitRead(numberSegments[11], 1));
170  digitalWrite(NOGAc, bitRead(numberSegments[11], 2));
171  digitalWrite(NOGAd, bitRead(numberSegments[11], 3));
172  digitalWrite(NOGAe, bitRead(numberSegments[11], 4));
173  digitalWrite(NOGAf, bitRead(numberSegments[11], 5));
174  digitalWrite(NOGAg, bitRead(numberSegments[11], 6));
175  digitalWrite(NOGAt, bitRead(numberSegments[11], 7));
176   
177  digitalWrite(NOGAa, bitRead(numberSegments[10], 0));
178  digitalWrite(NOGAb, bitRead(numberSegments[10], 1));
179  digitalWrite(NOGAc, bitRead(numberSegments[10], 2));
180  digitalWrite(NOGAd, bitRead(numberSegments[10], 3));
181  digitalWrite(NOGAe, bitRead(numberSegments[10], 4));
182  digitalWrite(NOGAf, bitRead(numberSegments[10], 5));
183  digitalWrite(NOGAg, bitRead(numberSegments[10], 6));
184  digitalWrite(NOGAt, bitRead(numberSegments[10], 7));
185 
186 
187  digitalWrite(NOGA1, HIGH);
188  digitalWrite(NOGA2, HIGH);
189  digitalWrite(NOGA3, HIGH);
190  digitalWrite(NOGA4, LOW);
191  digitalWrite(NOGA5, HIGH);
192   
193  digitalWrite(NOGAa, bitRead(numberSegments[12], 0));
194  digitalWrite(NOGAb, bitRead(numberSegments[12], 1));
195  digitalWrite(NOGAc, bitRead(numberSegments[12], 2));
196  digitalWrite(NOGAd, bitRead(numberSegments[12], 3));
197  digitalWrite(NOGAe, bitRead(numberSegments[12], 4));
198  digitalWrite(NOGAf, bitRead(numberSegments[12], 5));
199  digitalWrite(NOGAg, bitRead(numberSegments[12], 6));
200  digitalWrite(NOGAt, bitRead(numberSegments[12], 7));
201   
202  digitalWrite(NOGAa, bitRead(numberSegments[10], 0));
203  digitalWrite(NOGAb, bitRead(numberSegments[10], 1));
204  digitalWrite(NOGAc, bitRead(numberSegments[10], 2));
205  digitalWrite(NOGAd, bitRead(numberSegments[10], 3));
206  digitalWrite(NOGAe, bitRead(numberSegments[10], 4));
207  digitalWrite(NOGAf, bitRead(numberSegments[10], 5));
208  digitalWrite(NOGAg, bitRead(numberSegments[10], 6));
209  digitalWrite(NOGAt, bitRead(numberSegments[10], 7));
210 
211  digitalWrite(NOGA1, HIGH);
212  digitalWrite(NOGA2, HIGH);
213  digitalWrite(NOGA3, HIGH);
214  digitalWrite(NOGA4, HIGH);
215  digitalWrite(NOGA5, LOW);
216   
217  digitalWrite(NOGAa, bitRead(numberSegments[SH3], 0));
218  digitalWrite(NOGAb, bitRead(numberSegments[SH3], 1));
219  digitalWrite(NOGAc, bitRead(numberSegments[SH3], 2));
220  digitalWrite(NOGAd, bitRead(numberSegments[SH3], 3));
221  digitalWrite(NOGAe, bitRead(numberSegments[SH3], 4));
222  digitalWrite(NOGAf, bitRead(numberSegments[SH3], 5));
223  digitalWrite(NOGAg, bitRead(numberSegments[SH3], 6));
224  digitalWrite(NOGAt, bitRead(numberSegments[SH3], 7));
225   
226  digitalWrite(NOGAa, bitRead(numberSegments[10], 0));
227  digitalWrite(NOGAb, bitRead(numberSegments[10], 1));
228  digitalWrite(NOGAc, bitRead(numberSegments[10], 2));
229  digitalWrite(NOGAd, bitRead(numberSegments[10], 3));
230  digitalWrite(NOGAe, bitRead(numberSegments[10], 4));
231  digitalWrite(NOGAf, bitRead(numberSegments[10], 5));
232  digitalWrite(NOGAg, bitRead(numberSegments[10], 6));
233  digitalWrite(NOGAt, bitRead(numberSegments[10], 7));
234 
235}
236   
237  //----------------------ОБРАБОТЧИКИ ПРЕРЫВАНИЙ--------------------------
238void timer_interrupt() {       // прерывания таймера срабатывают каждые 40 мкс
239  tic++;                       // счетчик
240  if (tic > Dimmer)            // если настало время включать ток
241    digitalWrite(dimPin, 1);   // врубить ток
242}
243 
244void  detect_up() {    // обработка внешнего прерывания на пересекание нуля снизу
245  tic = 0;                                  // обнулить счетчик
246  ResumeTimer1();                           // перезапустить таймер
247  attachInterrupt(0, detect_down, RISING);  // перенастроить прерывание
248}
249 
250void  detect_down() {  // обработка внешнего прерывания на пересекание нуля сверху
251  tic = 0;                                  // обнулить счетчик
252  StopTimer1();                             // остановить таймер
253  digitalWrite(dimPin, 0);                  // вырубить ток
254  attachInterrupt(0, detect_up, FALLING);   // перенастроить прерывание
255}
256//----------------------ОБРАБОТЧИКИ ПРЕРЫВАНИЙ--------------------------
257   
258  
259 
260   

 

Пушной звер
Пушной звер аватар
Offline
Зарегистрирован: 17.03.2013

DHT11? сетевой вентелятор диммером?

скорость там изменять нельзя, точнее можно изменением частоты в небольших пределах, но в целом, взять вентель от компа на 12 вольт, както логичнее.

ну а DHT, лучше заранее сменить на чтото вроде sht20.

Bruzzer
Offline
Зарегистрирован: 17.03.2020

olegoriy пишет:

Не ругайтесь пожалуйста что нет схемы. Рисовать схемы для меня просто ад!!

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

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ТС, ты программированию не у индусов учился? 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

ТС, ты программированию не у индусов учился? 

ну вот, опять, в кои-то веки появился TC пишущий латиницей на понятном русском языке и, ...облом )))

olegoriy
Offline
Зарегистрирован: 08.02.2015

З

olegoriy
Offline
Зарегистрирован: 08.02.2015

Пушной звер пишет:

DHT11? сетевой вентелятор диммером?

скорость там изменять нельзя, точнее можно изменением частоты в небольших пределах

DTH11 понятно что чушь не сусветная, просто попался под руку. А сетевой вентилятор диммером почему нет? Ведь все получилось. Я видел похожие схемы и управление на очень брендовых системах. У меня пылесос на такой же схеме, с изменением скорости мотора, хотя могу ошибаться, если хотите сниму осцифолограмму с семистора пылесоса. А вон возмите плату управления воротами, там точно такая же схема, так вообще для трехфазного двигателя с конденцатором, хотя в их схему мне слабо вериться.

olegoriy
Offline
Зарегистрирован: 08.02.2015

DetSimen пишет:

ТС, ты программированию не у индусов учился? 

Неее я вообще не когда не учился программированию. Честно!! Объясните пожалуйста что не так???

Пушной звер
Пушной звер аватар
Offline
Зарегистрирован: 17.03.2013

olegoriy пишет:

Я видел похожие схемы и управление на очень брендовых системах. У меня пылесос на такой же схеме, с изменением скорости мотора,

ага, и в дрели еще... там двиг коллекторный.

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

olegoriy
Offline
Зарегистрирован: 08.02.2015

Пушной звер пишет:

olegoriy пишет:

Я видел похожие схемы и управление на очень брендовых системах. У меня пылесос на такой же схеме, с изменением скорости мотора,

ага, и в дрели еще... там двиг коллекторный.

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

Ну а если глушить симистором полуволны через одну (не так как в коде) получиться 25 герц, или это так не сработает??

Morroc
Offline
Зарегистрирован: 24.10.2016

Если конденсатор внутри вытяжки есть, то можно им поиграться - мощность падает и вентиль просто не разгоняется до максимальных оборотов, чисто по шуму этого достаточно должно быть, я у себя так сделал (сами обороты может и не сильно меняются, но жужжит заметно тише). Ну а потом пару конденсаторов, пару релюшек... ) А потом в 3д принтерах, например, тоже ведь применяют вентиляторы, которые не предназначены для управления оборотами, но тем не менее управляют тупо ШИМом и работает.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

olegoriy пишет:

Ну а если глушить симистором полуволны через одну (не так как в коде) получиться 25 герц

Что, правда?