Самодельная автоматическая вытяжка с регулировкой оборотов на arduino.
- Войдите на сайт для отправки комментариев
Сб, 04/07/2020 - 00:48
Привет форумчане. Хотелось бы поделиться своим проектом.
Задумал сделать вытяжку в ванной с применением ардуины, но что бы было интересней добавил к часто повторяемым проектам, регулировку скорости вентилятора 220 вольт.
https://www.youtube.com/watch?v=zRnoZTSYxf4
Не ругайтесь пожалуйста что нет схемы. Рисовать схемы для меня просто ад!! Но если кому то ну прям очень нужно, то пишите я заморочусь.
#include <iarduino_DHT.h> // подключаем библиотеку для работы с датчиком DHT iarduino_DHT sensor(12); // подключаем DHT датчик на 12 пин #define dimPin 3 // пин оптопары затвора симистора #define zeroPin 2 // пин оптопары определяющию зиро крос #include <CyberLib.h> // шустрая библиотека для таймера volatile int tic, Dimmer; // вводим переменную диммер #define knopka1 10 // Кнопка скорости #define knopka2 11 // Кнопка режима #define NOGA1 4 // Ноги экрана #define NOGA2 7 #define NOGA3 8 #define NOGA4 A0 #define NOGA5 13 #define NOGAa 5 #define NOGAb 9 #define NOGAc A2 #define NOGAd A4 #define NOGAe A5 #define NOGAf 6 #define NOGAg A1 #define NOGAt A3 long p = 0; // переменная Для работы со временем опроса датчика DHT long i = 5000; // переменная Для работы со временем опроса датчика DHT long p1 = 0; // переменная Для работы со временем нажатия кнопок long i1 = 200; // переменная Для работы со временем нажатия кнопок int SH1 = 0; // переменная для работы с экраном int SH2 = 0; // переменная для работы с экраном int SH3 = 13; // переменная для работы с экраном int Z = 0; // переменная режима работы SPEED-humidity int Y = 4; // переменная режима скорость int h =0; // пока не опросили датчик DHT влажность равна 0 byte numberSegments[15] = { // масив для цифр экрана 0b00111111, 0b00000110, 0b01011011, 0b01001111, 0b01100110, 0b01101101, 0b01111101, 0b00000111, 0b01111111, 0b01101111, 0b00000000, 0b11100011, 0b11011100, 0b01101101, 0b01110110 }; void setup() { pinMode(dimPin, OUTPUT); digitalWrite(dimPin, 0); pinMode(zeroPin, INPUT); // настраиваем порт на вход для отслеживания прохождения сигнала через ноль attachInterrupt(0, detect_up, FALLING); // настроить срабатывание прерывания interrupt0 на pin 2 на низкий уровень StartTimer1(timer_interrupt, 40); // время для одного разряда ШИМ StopTimer1(); pinMode(knopka1, INPUT); pinMode(knopka2, INPUT); pinMode(NOGA1, OUTPUT); pinMode(NOGA2, OUTPUT); pinMode(NOGA3, OUTPUT); pinMode(NOGA4, OUTPUT); pinMode(NOGA5, OUTPUT); pinMode(NOGAa, OUTPUT); pinMode(NOGAb, OUTPUT); pinMode(NOGAc, OUTPUT); pinMode(NOGAd, OUTPUT); pinMode(NOGAe, OUTPUT); pinMode(NOGAf, OUTPUT); pinMode(NOGAg, OUTPUT); pinMode(NOGAt, OUTPUT); } void loop() { unsigned long r = millis(); if(r - p > i & Z == 1){ switch(sensor.read()){ // читаем показания датчика case DHT_OK:h = sensor.hum; break;} p = r;} if (!digitalRead(knopka1)) { // изменяем скорость if(r - p1 > i1){ Y = Y + 1; if(Y > 4) Y = 0; p1 = r; }} if (!digitalRead(knopka2)) { // изменяем режим if(r - p1 > i1){ Z=!Z; p1 = r; }} if( Z == 0){ // режимы скорости SH3 = 13; if(Y == 0){ SH1 = 0;SH2 = 0; Dimmer = 255;} if(Y == 1){ SH1 = 2;SH2 = 5; Dimmer = 140;} if(Y == 2){ SH1 = 5;SH2 = 0; Dimmer = 120;} if(Y == 3){ SH1 = 7;SH2 = 5; Dimmer = 100;} if(Y == 4){ SH1 = 9;SH2 = 9; Dimmer = 10;} } if( Z == 1){ // режим скорость от влажности SH3 = 14; SH1 = h/10; SH2 = h - (SH1*10) ; if(h < 50){Dimmer = 255;} if(h > 50 & h < 60){Dimmer = 140;} if(h > 60 & h < 70){Dimmer = 120;} if(h > 70 & h < 80){Dimmer = 100;} if(h > 80){Dimmer = 10;} } digitalWrite(NOGA1, LOW); // выводим значения на экран digitalWrite(NOGA2, HIGH); digitalWrite(NOGA3, HIGH); digitalWrite(NOGA4, HIGH); digitalWrite(NOGA5, HIGH); digitalWrite(NOGAa, bitRead(numberSegments[SH1], 0)); digitalWrite(NOGAb, bitRead(numberSegments[SH1], 1)); digitalWrite(NOGAc, bitRead(numberSegments[SH1], 2)); digitalWrite(NOGAd, bitRead(numberSegments[SH1], 3)); digitalWrite(NOGAe, bitRead(numberSegments[SH1], 4)); digitalWrite(NOGAf, bitRead(numberSegments[SH1], 5)); digitalWrite(NOGAg, bitRead(numberSegments[SH1], 6)); digitalWrite(NOGAt, bitRead(numberSegments[SH1], 7)); digitalWrite(NOGAa, bitRead(numberSegments[10], 0)); digitalWrite(NOGAb, bitRead(numberSegments[10], 1)); digitalWrite(NOGAc, bitRead(numberSegments[10], 2)); digitalWrite(NOGAd, bitRead(numberSegments[10], 3)); digitalWrite(NOGAe, bitRead(numberSegments[10], 4)); digitalWrite(NOGAf, bitRead(numberSegments[10], 5)); digitalWrite(NOGAg, bitRead(numberSegments[10], 6)); digitalWrite(NOGAt, bitRead(numberSegments[10], 7)); digitalWrite(NOGA1, HIGH); digitalWrite(NOGA2, LOW); digitalWrite(NOGA3, HIGH); digitalWrite(NOGA4, HIGH); digitalWrite(NOGA5, HIGH); digitalWrite(NOGAa, bitRead(numberSegments[SH2], 0)); digitalWrite(NOGAb, bitRead(numberSegments[SH2], 1)); digitalWrite(NOGAc, bitRead(numberSegments[SH2], 2)); digitalWrite(NOGAd, bitRead(numberSegments[SH2], 3)); digitalWrite(NOGAe, bitRead(numberSegments[SH2], 4)); digitalWrite(NOGAf, bitRead(numberSegments[SH2], 5)); digitalWrite(NOGAg, bitRead(numberSegments[SH2], 6)); digitalWrite(NOGAt, bitRead(numberSegments[SH2], 7)); digitalWrite(NOGAa, bitRead(numberSegments[10], 0)); digitalWrite(NOGAb, bitRead(numberSegments[10], 1)); digitalWrite(NOGAc, bitRead(numberSegments[10], 2)); digitalWrite(NOGAd, bitRead(numberSegments[10], 3)); digitalWrite(NOGAe, bitRead(numberSegments[10], 4)); digitalWrite(NOGAf, bitRead(numberSegments[10], 5)); digitalWrite(NOGAg, bitRead(numberSegments[10], 6)); digitalWrite(NOGAt, bitRead(numberSegments[10], 7)); digitalWrite(NOGA1, HIGH); digitalWrite(NOGA2, HIGH); digitalWrite(NOGA3, LOW); digitalWrite(NOGA4, HIGH); digitalWrite(NOGA5, HIGH); digitalWrite(NOGAa, bitRead(numberSegments[11], 0)); digitalWrite(NOGAb, bitRead(numberSegments[11], 1)); digitalWrite(NOGAc, bitRead(numberSegments[11], 2)); digitalWrite(NOGAd, bitRead(numberSegments[11], 3)); digitalWrite(NOGAe, bitRead(numberSegments[11], 4)); digitalWrite(NOGAf, bitRead(numberSegments[11], 5)); digitalWrite(NOGAg, bitRead(numberSegments[11], 6)); digitalWrite(NOGAt, bitRead(numberSegments[11], 7)); digitalWrite(NOGAa, bitRead(numberSegments[10], 0)); digitalWrite(NOGAb, bitRead(numberSegments[10], 1)); digitalWrite(NOGAc, bitRead(numberSegments[10], 2)); digitalWrite(NOGAd, bitRead(numberSegments[10], 3)); digitalWrite(NOGAe, bitRead(numberSegments[10], 4)); digitalWrite(NOGAf, bitRead(numberSegments[10], 5)); digitalWrite(NOGAg, bitRead(numberSegments[10], 6)); digitalWrite(NOGAt, bitRead(numberSegments[10], 7)); digitalWrite(NOGA1, HIGH); digitalWrite(NOGA2, HIGH); digitalWrite(NOGA3, HIGH); digitalWrite(NOGA4, LOW); digitalWrite(NOGA5, HIGH); digitalWrite(NOGAa, bitRead(numberSegments[12], 0)); digitalWrite(NOGAb, bitRead(numberSegments[12], 1)); digitalWrite(NOGAc, bitRead(numberSegments[12], 2)); digitalWrite(NOGAd, bitRead(numberSegments[12], 3)); digitalWrite(NOGAe, bitRead(numberSegments[12], 4)); digitalWrite(NOGAf, bitRead(numberSegments[12], 5)); digitalWrite(NOGAg, bitRead(numberSegments[12], 6)); digitalWrite(NOGAt, bitRead(numberSegments[12], 7)); digitalWrite(NOGAa, bitRead(numberSegments[10], 0)); digitalWrite(NOGAb, bitRead(numberSegments[10], 1)); digitalWrite(NOGAc, bitRead(numberSegments[10], 2)); digitalWrite(NOGAd, bitRead(numberSegments[10], 3)); digitalWrite(NOGAe, bitRead(numberSegments[10], 4)); digitalWrite(NOGAf, bitRead(numberSegments[10], 5)); digitalWrite(NOGAg, bitRead(numberSegments[10], 6)); digitalWrite(NOGAt, bitRead(numberSegments[10], 7)); digitalWrite(NOGA1, HIGH); digitalWrite(NOGA2, HIGH); digitalWrite(NOGA3, HIGH); digitalWrite(NOGA4, HIGH); digitalWrite(NOGA5, LOW); digitalWrite(NOGAa, bitRead(numberSegments[SH3], 0)); digitalWrite(NOGAb, bitRead(numberSegments[SH3], 1)); digitalWrite(NOGAc, bitRead(numberSegments[SH3], 2)); digitalWrite(NOGAd, bitRead(numberSegments[SH3], 3)); digitalWrite(NOGAe, bitRead(numberSegments[SH3], 4)); digitalWrite(NOGAf, bitRead(numberSegments[SH3], 5)); digitalWrite(NOGAg, bitRead(numberSegments[SH3], 6)); digitalWrite(NOGAt, bitRead(numberSegments[SH3], 7)); digitalWrite(NOGAa, bitRead(numberSegments[10], 0)); digitalWrite(NOGAb, bitRead(numberSegments[10], 1)); digitalWrite(NOGAc, bitRead(numberSegments[10], 2)); digitalWrite(NOGAd, bitRead(numberSegments[10], 3)); digitalWrite(NOGAe, bitRead(numberSegments[10], 4)); digitalWrite(NOGAf, bitRead(numberSegments[10], 5)); digitalWrite(NOGAg, bitRead(numberSegments[10], 6)); digitalWrite(NOGAt, bitRead(numberSegments[10], 7)); } //----------------------ОБРАБОТЧИКИ ПРЕРЫВАНИЙ-------------------------- void timer_interrupt() { // прерывания таймера срабатывают каждые 40 мкс tic++; // счетчик if (tic > Dimmer) // если настало время включать ток digitalWrite(dimPin, 1); // врубить ток } void detect_up() { // обработка внешнего прерывания на пересекание нуля снизу tic = 0; // обнулить счетчик ResumeTimer1(); // перезапустить таймер attachInterrupt(0, detect_down, RISING); // перенастроить прерывание } void detect_down() { // обработка внешнего прерывания на пересекание нуля сверху tic = 0; // обнулить счетчик StopTimer1(); // остановить таймер digitalWrite(dimPin, 0); // вырубить ток attachInterrupt(0, detect_up, FALLING); // перенастроить прерывание } //----------------------ОБРАБОТЧИКИ ПРЕРЫВАНИЙ--------------------------
DHT11? сетевой вентелятор диммером?
скорость там изменять нельзя, точнее можно изменением частоты в небольших пределах, но в целом, взять вентель от компа на 12 вольт, както логичнее.
ну а DHT, лучше заранее сменить на чтото вроде sht20.
Не ругайтесь пожалуйста что нет схемы. Рисовать схемы для меня просто ад!!
Не буду ругаться, что нет схемы. Ругнусь, что нет описания. Что регулирует, в каких диапазонах, основные элементы ...
ТС, ты программированию не у индусов учился?
ТС, ты программированию не у индусов учился?
ну вот, опять, в кои-то веки появился TC пишущий латиницей на понятном русском языке и, ...облом )))
З
DHT11? сетевой вентелятор диммером?
скорость там изменять нельзя, точнее можно изменением частоты в небольших пределах
DTH11 понятно что чушь не сусветная, просто попался под руку. А сетевой вентилятор диммером почему нет? Ведь все получилось. Я видел похожие схемы и управление на очень брендовых системах. У меня пылесос на такой же схеме, с изменением скорости мотора, хотя могу ошибаться, если хотите сниму осцифолограмму с семистора пылесоса. А вон возмите плату управления воротами, там точно такая же схема, так вообще для трехфазного двигателя с конденцатором, хотя в их схему мне слабо вериться.
ТС, ты программированию не у индусов учился?
Неее я вообще не когда не учился программированию. Честно!! Объясните пожалуйста что не так???
Я видел похожие схемы и управление на очень брендовых системах. У меня пылесос на такой же схеме, с изменением скорости мотора,
ага, и в дрели еще... там двиг коллекторный.
хотя возможно в том, чтото другое, а вообще они только частотой управляются, в небольших приделах.
Я видел похожие схемы и управление на очень брендовых системах. У меня пылесос на такой же схеме, с изменением скорости мотора,
ага, и в дрели еще... там двиг коллекторный.
хотя возможно в том, чтото другое, а вообще они только частотой управляются, в небольших приделах.
Ну а если глушить симистором полуволны через одну (не так как в коде) получиться 25 герц, или это так не сработает??
Если конденсатор внутри вытяжки есть, то можно им поиграться - мощность падает и вентиль просто не разгоняется до максимальных оборотов, чисто по шуму этого достаточно должно быть, я у себя так сделал (сами обороты может и не сильно меняются, но жужжит заметно тише). Ну а потом пару конденсаторов, пару релюшек... ) А потом в 3д принтерах, например, тоже ведь применяют вентиляторы, которые не предназначены для управления оборотами, но тем не менее управляют тупо ШИМом и работает.
Ну а если глушить симистором полуволны через одну (не так как в коде) получиться 25 герц